2

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

var myObject = {};

有什么区别...

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

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

在javascript中?

我无法理解差异或是否存在差异以及如何以及何时使用这些语法中的任何一种。

当我编写这样的代码时,似乎真的没有区别。

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

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

4

3 回答 3

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

原型是构造函数的属性——不是该类的任何实例。

如果您将函数放在原型上,则该函数对象仅存在一个实例,并且将由该类的所有实例共享。这比在每个实例上都有一个副本更节省内存。

无论代码是在浏览器中还是在服务器上,所有这些都适用——它仍然是同一种语言。

于 2012-05-24T18:29:55.693 回答
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 ,这是第一个实例中发生的情况。

编辑:对不起,清晨不清楚我想说什么。

于 2012-05-24T18:31:16.420 回答
0

本质上,这表示一个静态方法(或仅附加到该对象的方法(在本例中为 myObject):

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

这表示附加到对象原型的方法(实例方法):

myObject.prototype.someFunc = function () {...};
于 2012-05-24T18:31:44.273 回答