Padrão de Objeto JavaScript

Modo de fábrica

Vantagens e desvantagens do modo de fábrica

  • Semelhante à fábrica real
  • Um novo objeto é criado dentro da função e, finalmente, o novo objeto após o processamento é retornado
  • (Desvantagens) Embora new seja uma nova função em comum, mas os métodos sejam comparados, ela retorna false, ou seja, a nova função, o método chinês, não compartilha o mesmo endereço.
//对象举例
function createObject(){
    //先创建一个新对象
    var obj=new Object();
    //赋予新对象属性
    obj.name="西瓜汁"; //属性
    //赋予新对象方法
    obj.run=function(){
        return "贴了商标了";
    }
    //返回对象
    return obj;//出厂 
}
var o1=new createObject();
var o2=new createObject();
console.log(o1===o2); //false;

Padrão do construtor

Diferença do modo de fábrica

  • No construtor, não há necessidade de criar um objeto internamente (adicione propriedades, métodos e retorne objetos a esse objeto)
  • Se você deseja escrever um padrão de construtor, a primeira letra da função precisa ser maiúscula
//对象举例
function  CreateFn(){
    this.str="构造函数";
    this .run=function(){
        return "js构造函数方法";
    }
}
//创建新对象
var obj1=new CreateFn();
var obj2=new CreateFn();
//输出
console.log(obj1.str);
console.log(obj2.str);
console.log(obj1.run===obj2.run); //false

Modo de protótipo

  • Sempre que uma função é criada, existe uma propriedade prototype (function)
  • Um ponteiro de protótipo (protótipo) para essa propriedade aponta para um objeto, e o objetivo desse objeto pode ser compartilhado por métodos e propriedades de todas as instâncias de objeto de um tipo específico.
  • Protótipo (protótipo) é compartilhar todas as propriedades e métodos, ou seja, se 2 novas funções (instanciação), seus métodos são compartilhados, a comparação retorna verdadeira.

Desvantagens

  • Por ser um método compartilhado, o mesmo endereço de memória é compartilhado.Se um for modificado posteriormente, todos serão modificados.
//对象举例
function fn(){
    fn.prototype.userName="张三";
    fn.prototype.run=function(){
        return "这是一个共享的方法";
    }
}
var obj1=new fn();
var obj2=new fn();
console.log(obj1.run===obj2.run); //true  说明这两个方法是共享的

Combinação de padrão de construtor e protótipo

  • Construtor: define propriedades da instância. (Privado)
  • Protótipo: definir e compartilhar atributos
  • Vantagens: Cada instância terá seu próprio atributo de instância, mas, ao mesmo tempo, compartilhará o mesmo método.
//对象举例
function CreateFn(){
    this.userName="zhangsan";
    this.age=18;
    this.arr=[1,2,3];
}
//共享方法
CreateFn.prototype.run=function(){
    return "我是共享的";
}

//创建新的对象
var obj1=new CreateFn();
var obj2=new CreateFn();
console.log(obj1.run===obj2.run); //true
//修改obj1的属性
obj1.arr[1]="李四";
console.log(obj1.arr); // [1,"李四",3]
console.log(obj2.arr); ///[1,2,3]

//传参数
//对象举例
function CreateFn(name,age) {
    this.userName = name;
    this.age = age;
    this.arr = [1, 2, 3];
}
//共享方法
CreateFn.prototype.run = function () {
    return "我是共享的";
}

//创建新的对象
var obj1 = new CreateFn("张三",18);
var obj2 = new CreateFn("李四",22);
console.log(obj1.userName); //张三
console.log(obj2.userName); //李四

Modo de protótipo dinâmico

  • O modo de protótipo dinâmico é encapsular todas as informações (propriedades e métodos) no construtor e inicializar o protótipo através do construtor
  • Solução: O protótipo é inicializado quando o primeiro objeto é instanciado, o último não precisa ser inicializado.
function CreateFn(){
    this.userName="张三";
    //原型只初始化一次
    if(typeof this.run!="function"){
        console.log(1111);
        CreateFn.prototype.run=function(){
            return "共享的run方法"
        }
    }
}
var obj1=new CreateFn();
var obj2=new CreateFn();
Pia
49 artigos originais publicados · Gosto 3 · Visitas 5109

Acho que você gosta

Origin blog.csdn.net/weixin_43487066/article/details/104349648
Recomendado
Clasificación