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}