Javascript 对象实例与返回的函数
Javascript object instance vs returned functions
在
javascript中创建对象有什么区别
test = function(a, b){
this.calculate = function(){
return a + b;
}
}
obj = new test(1, 2);
console.log(obj.calculate());
和
test = function(a, b){
return {
calculate: function(){
return a + b;
}
}
}
obj = test(1, 2);
console.log(obj.calculate());
我在不同的情况下使用过两者,但从未理解其中的区别,我知道后一种方法具有为实例创建函数的开销,但仍然看到它在很多情况下使用,任何人都可以为我澄清这一点吗?我无法通过搜索找到有关此的任何内容
第一个还为每个实例创建函数。这种情况的唯一区别是,在第一种情况下,新实例继承自test.prototype
,而在第二种情况下,它直接从Object
继承。
在第一种情况下,通过将函数添加到原型中,让实例共享代码会更容易。例如:
var Test = function(a, b){
this._a = a;
this._b = b;
};
Test.prototype.calculate = function(){
return this._a + this._b;
};
由于所有实例都继承自Test.prototype
,因此calculate
函数只存在一次,并且所有实例都引用同一函数。
正如菲利克斯在评论中所说,区别在于继承链。第一个继承自test.prototype
,第二个继承自Object
。结果是,如果您只想创建一次函数并让每个实例共享它,则必须执行以下操作:
test = function (a, b) {
this.a = a;
this.b = b;
}
test.prototype.calculate = function () {
return this.a + this.b;
}
相关文章:
- ES6构造函数返回基类的实例
- 从函数返回角度承诺
- 如何从jquery函数返回变量
- 根据是否解析了 Promise 从函数返回值
- Javascript函数返回未定义
- 如果函数返回True,则显示Javascript按钮
- Google Sheet自定义函数返回0
- 从Ajax函数返回值
- 使用for循环从Javascript中的函数返回多个值
- 谷歌地图:函数返回未定义的值在console.log中运行良好
- 从函数中的函数返回数组时出错
- 如何从嵌套的API函数返回值
- 从Mongoose结果匿名函数返回父函数
- 函数返回错误'令牌{'
- Jquery函数返回订单问题
- Mocha/Chai测试链接到函数返回断言错误
- 从异步函数返回值
- 函数返回后更新变量
- 我如何才能继续'如果'语句来比较作为参数的多个函数返回值
- 将外部函数返回的id传递给内部函数