2011-12-12 92 views
1

这些天我一直在与这些脚本一起,并在一番研究后,我仍然无法找到答案。如何使用Object.prototype向Object构造函数添加函数?

因此,这里的问题,我想(例如)增加一个功能为对象(。长度()的情况下,由于本地没有这个还没有),我试过:

Object.prototype.length = function() { /* Some fancy work */ }; //It works! 

Object.prototype["width"] = function() { /* Some fancy work */ }; //It works! 

/* But the following DOESN'T work */ 
Object.prototype = { 
    length: function() { /* Some fancy work */ }, 
    width: function() { /* Some other fancy work */ } 
}; 

最后一个不起作用,这是使用像这样的对象添加函数的最短途径,我不知道为什么。我遇到过这些代码(例如来自jQuery 1.7.1),我试图弄清楚它是如何工作的,但我不适用于我。我认为它必须以某种方式工作,因为jQuery使用它,你能告诉我怎么样?

我已经看到了很多使用这些代码的人:

a = { 
    b: "Something", 
    c: function() {} 
} 

和其他人使用:

a.prototype = { 
    b: "Something", 
    c: function() {} 
} 

那么有什么区别?这与第一个问题有某种关系,所以我很想完全理解它。

+0

SO上的每个帖子都是一个问题。请一次写出一个问题_,而不是三合一。你应该在9个月后知道这件事! –

+0

我会立即提出第三个问题。感谢提醒和抱歉。 [x] – xx3004

回答

1

1),因为你想更换内置对象的功能只有两个方法全不能使用

Object.prototype = { 
    length: function() { /* Some fancy work */ }, 
    width: function() { /* Some other fancy work */ } 
}; 

。这将打破整个系统。

2)Object.method()是其他语言的静态方法的模拟。它由伪类拥有,而不是由它的每个实例拥有。同时Object.prototype.method是常规方法或领域的模拟。它只能使用实例访问。

3)在对象创建时触发的自动功能是Object。你不能修改,因为这是一个内置对象。

+0

嗨比约恩,感谢您的快速回复。对于第一个问题,我现在完全清楚,我没有注意到我正在替换Object()的整个系统。我想问一下,如果没有循环遍历每个Object.prototype.Name,是否有添加属性?你有没有更多的静态方法和模拟方法的例子,或者一篇文章会帮助很多。而对于第三个问题,这意味着没有,没有办法解决,对吗? [X] – xx3004