0

正如我在“JavaScript .prototype 如何工作?”这个问题中看到的那样。使用该prototype属性的正确方法是使用功能对象。但我无法理解为什么我们需要使用功能对象prototype

4

3 回答 3

1

如您提到的问题中所述

var obj = new Object(); // not a functional object
obj.prototype.test = function() { alert('Hello?'); }; // this is wrong!

那是因为Object它是所有人的基类。

function MyClass() {

}
var obj = new MyClass();

// it returns true even though its an instance of MyClass
console.log(obj instanceof Object);

如果将原型函数添加到Object类中,则需要确保其不可枚举。

于 2013-02-19T16:02:06.113 回答
1

当你在 JavaScript 中创建一个函数时,解释器会自动为它创建一个原型对象。这是因为函数可以用作构造函数。

只有函数而不是其他对象可以用作构造函数。

这就是只有函数才有prototype属性的原因。函数的prototype性质非常特殊。__proto__该函数的实例将在其链中具有该函数的原型。

阅读此答案以获取更多详细信息:https ://stackoverflow.com/a/8096017/783743

于 2013-02-19T16:07:36.027 回答
1

为什么我们需要原型的功能对象?

在早期的 JS 版本中,这是一个奇怪的(?)语言设计决定。然而,这在 EcmaScript 5 中得到了修复:Object.create允许我们在没有构造函数的情况下进行原型继承。因此,如果您不需要初始化函数(例如作为闭包),您可以愉快地使用 "Object.create" 而不是 "new"

于 2013-02-19T16:18:44.580 回答