myObject.someFunc = function(){...}之间的区别是什么?或javascript中的myObject.prototype.someFunc = function(){...}?

时间:2012-05-24 18:27:07

标签: javascript

假设我在javascript中创建了一个对象。

var myObject = {};

有什么区别......

myObject.someFunc = function(){...}; 

myObject.prototype.someFunc = function(){...} 

在javascript中?

我无法理解差异,或者是否存在差异,以及如何以及何时使用这些语法。

当我编写类似这样的内容时,似乎确实没有区别。

我正在寻找客户端(浏览器)和服务器端(如node.js)的答案。

我想要正确准确地编码,这真的很困扰我。

3 个答案:

答案 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 () {...};