Javascript 使用新的功能内原型';s属性
我见过一个Javascript项目,其中原型属性的定义如下:Javascript 使用新的功能内原型';s属性,javascript,Javascript,我见过一个Javascript项目,其中原型属性的定义如下: myFunc.prototype.a = new myObject() 我想知道当我调用a属性的newmyfunc()时会发生什么: 它是返回new myObject()的结果,还是每次调用myFunc.a它都会调用newmyObject() 在不同的myFunc实例上,a属性与普通原型属性相同,或者每个实例的a不同myObject()实例 请参见:每个TodoList实例都将共享相同的本地存储,因此使用相同的主干.localSto
myFunc.prototype.a = new myObject()
我想知道当我调用a属性的newmyfunc()
时会发生什么:
它是返回new myObject()
的结果,还是每次调用myFunc.a
它都会调用newmyObject()
在不同的myFunc
实例上,a
属性与普通原型属性相同,或者每个实例的a
不同myObject()
实例
请参见:每个TodoList实例都将共享相同的本地存储,因此使用相同的主干.localStorage()实例?否,您的
myObject
的所有实例都将使用相同的\u proto\u
如果您从一个对象访问
a
,您将访问原型中的一个,但是如果您在一个对象上设置a
,那么这个对象将拥有您给他的a
,而其他对象将保留旧的。不,您的myObject
的所有实例都将具有相同的\uuuuuuuuuuuuu protou
如果您从一个对象访问
a
,您将访问一个原型,但是如果您在一个对象上设置a
,那么这个对象将拥有您给他的a
,而其他对象将保留旧的。希望这将帮助您:
var Person = function (name, age) {
this.getName = function () { return name; };
this.getAge = function () { return age; };
};
var Employee = function (employee_id) {
this.printBadge = function () {
console.log("#" + employee_id + " | " + this.record.getName());
};
};
Employee.prototype.record = new Person("Bob", 32);
var jim = new Employee(1),
doug = new Employee(2);
jim.printBadge(); // #1 | Bob
doug.printBadge(); // #2 | Bob
JavaScript的“更喜欢组合而不是继承”口号翻了四倍。您可以很高兴地覆盖一个人身上的特定对象:
jim.record = { getName : function () { return "Jim"; } };
jim.printBadge(); // #1 | Jim
doug.printBadge(); // #2 | Bob
修改原型对象(实例引用的对象)的属性时要小心
原因是您更改了共享原型对象的属性(静态,在其他语言中),而不是像Jim的情况那样替换整个原型对象(引用新对象,而不是静态对象)
但是X.prototype.y=newz()代码>可以如下所示,很简单:
var bob = new Person("Bob", 32);
Employee.prototype.record = bob;
var jim = new Employee(1),
doug = new Employee(2),
jeff = new Employee(3);
希望这能帮助您:
var Person = function (name, age) {
this.getName = function () { return name; };
this.getAge = function () { return age; };
};
var Employee = function (employee_id) {
this.printBadge = function () {
console.log("#" + employee_id + " | " + this.record.getName());
};
};
Employee.prototype.record = new Person("Bob", 32);
var jim = new Employee(1),
doug = new Employee(2);
jim.printBadge(); // #1 | Bob
doug.printBadge(); // #2 | Bob
JavaScript的“更喜欢组合而不是继承”口号翻了四倍。
您可以很高兴地覆盖一个人身上的特定对象:
jim.record = { getName : function () { return "Jim"; } };
jim.printBadge(); // #1 | Jim
doug.printBadge(); // #2 | Bob
修改原型对象(实例引用的对象)的属性时要小心
原因是您更改了共享原型对象的属性(静态,在其他语言中),而不是像Jim的情况那样替换整个原型对象(引用新对象,而不是静态对象)
但是X.prototype.y=newz()代码>可以如下所示,很简单:
var bob = new Person("Bob", 32);
Employee.prototype.record = bob;
var jim = new Employee(1),
doug = new Employee(2),
jeff = new Employee(3);
看到这一点,每个TodoList都将共享相同的localStorage,因此使用相同的主干。localStorage(),对吗?据我所知,似乎是的。但由于他们有继承方法等,我不确定。可能是集合构造函数克隆了localStorage属性或类似的内容。但我什么也没看到。不,它没有克隆任何东西。我认为,因为它使用了new关键字,所以会为每个实例创建一个新对象。不,因为它是原型的一个属性。您不需要设置它,只需要使用它的方法。看到了吗,每个TodoList都将共享相同的localStorage,因此使用相同的主干。localStorage(),对吗?据我所知,似乎是的。但由于他们有继承方法等,我不确定。可能是集合构造函数克隆了localStorage属性或类似的内容。但我什么也没看到。不,它没有克隆任何东西。我认为,因为它使用了new关键字,所以会为每个实例创建一个新对象。不,因为它是原型的一个属性。你不需要设置它,你只需要使用它的方法。