假设我在javascript中创建了一个对象。
var myObject = {};
有什么区别......
myObject.someFunc = function(){...};
和
myObject.prototype.someFunc = function(){...}
在javascript中?
我无法理解差异,或者是否存在差异,以及如何以及何时使用这些语法。
当我编写类似这样的内容时,似乎确实没有区别。
我正在寻找客户端(浏览器)和服务器端(如node.js)的答案。
我想要正确准确地编码,这真的很困扰我。
答案 0 :(得分:3)
在这种情况下:
var myObject = {};
myObject.someFunc = function(){...};
您所做的只是创建一个普通对象,它恰好具有一个属性,该属性是对函数的引用。这通常仅用于名称间距,即在一个公共对象下的一个地方对一整套函数进行分组。
但请注意,var myObject = {}
实际上没有prototype
,因此您的第二个例子是不可能的。
对于拥有原型的对象,它必须是构造函数的结果,即
function MyObject() {
...
}
MyObject.prototype.someFunc = function() { }
var myObject = new MyObject();
// myObject.someFunc can now be used
原型是构造函数的一个属性 - 而不是该类的任何实例。
如果将函数放在原型上,则只存在函数对象的一个实例,并且将由该类的所有实例共享。这对于在每个实例上都有一个副本来提高内存效率。
无论代码是在浏览器中还是在服务器上,所有这些都适用 - 它仍然是相同的语言。
答案 1 :(得分:0)
myObject.someFunc = function(){...}
是该函数的一次性实例,其返回值被分配给myObject的someFunc属性。
myObject.prototype.someFunc = function(){}
实际上是创建一个可以在myObject上的任何位置调用的方法,并且每次都会更改相同的值实例。
myObject.prototype.someFunc = function(num){
this.num_to_be_stored = num;
}
将更改num_to_be_stored的值而不是someFunc,这是第一个实例中发生的事情。
编辑:对不起清晨我不清楚我想说什么。
答案 2 :(得分:0)
本质上,这表示一个静态方法(或仅附加到该对象的方法(在本例中为myObject):
myObject.someFunc = function () {...};
这表示附加到对象原型的方法(实例方法):
myObject.prototype.someFunc = function () {...};