Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.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_Oop_Prototypal Inheritance - Fatal编程技术网

Javascript 改变[对象]。原型对[对象]';s嵌套函数

Javascript 改变[对象]。原型对[对象]';s嵌套函数,javascript,oop,prototypal-inheritance,Javascript,Oop,Prototypal Inheritance,使用以下代码作为可构造对象的示例: var Person = function (name) { this.name = name; }; var tom = new Person('tom'); 但是接着说,如果他们想改变Person对象,而tom是用它构建的,那么应该通过改变Person.prototype来完成: Person.prototype.say = function (words) { alert(this.name + ' says "' + words +

使用以下代码作为可构造对象的示例:

var Person = function (name) {
    this.name = name;
};

var tom = new Person('tom');
但是接着说,如果他们想改变
Person
对象,而
tom
是用它构建的,那么应该通过改变
Person.prototype
来完成:

Person.prototype.say = function (words) {
    alert(this.name + ' says "' + words + '"');
};
但是为什么原型(即
)必须改变呢?为什么不直接像这样改变

Person.say = function (words) {
    alert(this.name + ' says "' + words + '"');
};

有区别吗?

区别在于内存占用

在您的情况下,使用或不使用原型不会改变,因为您只有一个人的距离


但是如果你创建了很多istance,那么每个istance都会有自己的say函数,而不是原型,该函数将被共享。

区别在于内存占用

在您的情况下,使用或不使用原型不会改变,因为您只有一个人的距离


但是如果你创建了很多istance,那么每个istance都会有自己的say函数,而不是原型,该函数将被共享。

区别在于内存占用

在您的情况下,使用或不使用原型不会改变,因为您只有一个人的距离


但是如果你创建了很多istance,那么每个istance都会有自己的say函数,而不是原型,该函数将被共享。

区别在于内存占用

在您的情况下,使用或不使用原型不会改变,因为您只有一个人的距离


但是,如果您创建了很多距离,每个距离都将有自己的say函数,而不是原型,该函数将被共享。

以下代码将
say
函数绑定到对象原型。创建
Person
实例时,将针对
实例中的数据调用该函数

Person.prototype.say = function (words) {
    alert(this.name + ' says "' + words + '"');
};

下面的代码以静态方式将
say
函数绑定到对象(因此,不适用于每个实例)

下面的替代方法是,这是一个每个实例的函数,但不绑定到原型,而是按照创建
name
的相同方式,每个实例创建say函数

仅供参考,不建议使用此方法(我只是为了完整性而添加此方法)-建议将实例函数绑定到原型:

原型与每个实例的对比:

将函数绑定到原型(
Person.prototype.say=function…
)会消耗更少的内存,因为一个函数在对象的所有实例中共享

每个实例的绑定函数(
this.say=function…
)会消耗更多内存,因为每个创建的实例都会创建一个函数(不共享任何内容),尽管这样做的优点是能够访问私有成员,这在原型绑定函数中是不可能的

概述:

静态绑定:
Person.say=function(){…}

原型绑定:
Person.Prototype.say-function(){…}


实例绑定:
function Person(){this.say=function(){…}…}
以下代码将
say
函数绑定到对象原型。创建
Person
实例时,将针对
实例中的数据调用该函数

Person.prototype.say = function (words) {
    alert(this.name + ' says "' + words + '"');
};

下面的代码以静态方式将
say
函数绑定到对象(因此,不适用于每个实例)

下面的替代方法是,这是一个每个实例的函数,但不绑定到原型,而是按照创建
name
的相同方式,每个实例创建say函数

仅供参考,不建议使用此方法(我只是为了完整性而添加此方法)-建议将实例函数绑定到原型:

原型与每个实例的对比:

将函数绑定到原型(
Person.prototype.say=function…
)会消耗更少的内存,因为一个函数在对象的所有实例中共享

每个实例的绑定函数(
this.say=function…
)会消耗更多内存,因为每个创建的实例都会创建一个函数(不共享任何内容),尽管这样做的优点是能够访问私有成员,这在原型绑定函数中是不可能的

概述:

静态绑定:
Person.say=function(){…}

原型绑定:
Person.Prototype.say-function(){…}


实例绑定:
function Person(){this.say=function(){…}…}
以下代码将
say
函数绑定到对象原型。创建
Person
实例时,将针对
实例中的数据调用该函数

Person.prototype.say = function (words) {
    alert(this.name + ' says "' + words + '"');
};

下面的代码以静态方式将
say
函数绑定到对象(因此,不适用于每个实例)

下面的替代方法是,这是一个每个实例的函数,但不绑定到原型,而是按照创建
name
的相同方式,每个实例创建say函数

仅供参考,不建议使用此方法(我只是为了完整性而添加此方法)-建议将实例函数绑定到原型:

原型与每个实例的对比:

将函数绑定到原型(
Person.prototype.say=function…
)会消耗更少的内存,因为一个函数在对象的所有实例中共享

每个实例的绑定函数(
this.say=function…
)会消耗更多内存,因为每个创建的实例都会创建一个函数(不共享任何内容),尽管这样做的优点是能够访问私有成员,这在原型绑定函数中是不可能的

概述:

静态绑定:
Person.say=function(
Person.say = function()
var Person = function (name) {
    this.name = name;
};
var tom = new Person('tom');
console.log(tom.__proto__);
// Object {}
Person.prototype.say = function (words) {
    alert(this.name + ' says "' + words + '"');
};
console.log(tom.__proto__);
// Object {say: function}