Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用新的功能内原型';s属性_Javascript - Fatal编程技术网

Javascript 使用新的功能内原型';s属性

Javascript 使用新的功能内原型';s属性,javascript,Javascript,我见过一个Javascript项目,其中原型属性的定义如下: myFunc.prototype.a = new myObject() 我想知道当我调用a属性的newmyfunc()时会发生什么: 它是返回new myObject()的结果,还是每次调用myFunc.a它都会调用newmyObject() 在不同的myFunc实例上,a属性与普通原型属性相同,或者每个实例的a不同myObject()实例 请参见:每个TodoList实例都将共享相同的本地存储,因此使用相同的主干.localSto

我见过一个Javascript项目,其中原型属性的定义如下:

myFunc.prototype.a = new myObject()
我想知道当我调用a属性的
newmyfunc()
时会发生什么:

它是返回
new myObject()
的结果,还是每次调用
myFunc.a
它都会调用new
myObject()

在不同的
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关键字,所以会为每个实例创建一个新对象。不,因为它是原型的一个属性。你不需要设置它,你只需要使用它的方法。