将方法分配给函数内部或外部原型之间的差异
difference between assigning method to prototype inside or outside the function
我有一个充当基类的函数,我想向它添加方法。我可以通过名称(函数外)或不引用函数名称(函数内)将方法添加到函数的原型中:
1) 参考名称
Base.prototype.getResult = function () {
return 5;
}
2) 请勿引用名称
function Base() {
this.constructor.prototype.getResult = function () {
return 5;
}
}
我很好奇这两种方法之间有什么区别(含义是什么)?
编辑:更新了我的问题,包括Jacob Krall对此的建议示例:这意味着在构造第一个Base
对象之前,Base.prototype.getResult
将是未定义的(例如,在创建第一个Base
对象之前,您不能使用Base.getResult.apply(this)
在不同类型的对象上调用它
function Base() {
this.constructor.prototype.getResult3 = function () {
return alert(this.variable);
}
}
Base.prototype.getResult2 = function () {
return alert(this.variable);
}
var o = {
"variable":5
};
Base.prototype.getResult2.call(o); //works
try {
Base.prototype.getResult3.call(o); //doesn't work
} catch(e) {
alert('exception is catched');
}
var base = new Base();
base.getResult3.call(o); //works
在第一个示例中,在每个Base
对象的原型上设置getResult
。这种情况发生在程序执行的开始,很容易推理。我建议这样做。
在第二个示例中,每次构造new Base()
时,都会在每个Base
对象的原型上设置getResult
。
这意味着在构造第一个Base
对象之前,Base.prototype.getResult
将是undefined
(因此,例如,在创建第一个Base
对象之前,不能使用Base.getResult.apply(this)
在不同类型的对象上调用它,这很奇怪)。其次,这样做是浪费的,因为每次调用构造函数时都会创建一个新的Function
并将其分配给Base.prototype.getResult
。
如果将它们添加到原型中,它们将被初始化一次,并在所有实例之间共享。这将节省CPU和内存,便于为所有现有实例更改它,并具有固有错误(其中instanceOf为true,而Parent.call(This)则不会)。
不过,每次创建实例时重新启动原型或其一部分并没有多大意义。
这里解释了原型的作用以及在构造函数主体或原型上用this.someProp
定义的属性之间的区别。
- “util.inherits”和在NodeJS中扩展原型之间的区别
- JS构造函数的原型属性与其原型之间的区别
- 两个对象之间的Javascript原型
- 向构造函数或原型添加属性之间的区别
- 不需要的Javascript效果:原型在实例之间共享闭包
- 理解经典继承和原型继承之间的区别
- 基于类的语言(如Java或Python)和基于原型的语言(例如Javascript)之间的区别
- 试图理解JavaScript中原型和构造函数之间的区别
- 如何在不让web组件的原型进入全局命名空间的情况下维护它们之间的依赖关系
- Javascript 原型和调用之间的区别
- 使用原型和对象文字表示法创建对象之间的区别
- 构造函数中的方法与函数的原型属性之间的差异
- 原型:这两个脚本之间的区别
- 构造函数模式和原型模式之间的区别
- 原型函数和 json 表示法函数之间的区别
- 将方法分配给函数内部或外部原型之间的差异
- 持久化对象之间的MongoDB原型继承
- 将函数连接到原型与否之间的差异
- Javascript函数# 39;原型在对象之间共享
- 对象与对象之间的区别.Javascript中的原型