正如我在“JavaScript .prototype 如何工作?”这个问题中看到的那样。使用该prototype
属性的正确方法是使用功能对象。但我无法理解为什么我们需要使用功能对象prototype
?
问问题
79 次
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 回答