Possible Duplicate:
How does JavaScript .prototype work?
来自 Java 背景,我正在尝试理解 javascript。
请让我知道这些是否正确。
- 就像在 java 中一样,有一个至高无上的对象,所有其他对象都继承自它。
- 原型(prototype)属性就像一个指针,指向父对象(java中的类)
- 对于“Object”对象,原型(prototype)为空。
- 原型(prototype)属性的值是表示对象命名法的字符串,而不是像 C 中那样的指针。指针概念是使用隐藏属性 [[PROTOTYPE]] 实现的,这在脚本中是不可访问的。
我正在使用 node.js 而不是浏览器来学习 JS。
我试过了,
var human = Object.create(null); // same as var human;
console.log(Object.getPrototypeOf(human)); //null
var man = Object.create(human);
console.log(Object.getPrototypeOf(man));
//{}
//expected 'human'
var person = Object.create(Object.prototype); // same as var person = {}
console.log(Object.getPrototypeOf(person));
//{}
//expected 'object'
- 是的,
Object.create(null)
除外,它不继承任何东西。
- 不确定“父对象”是什么,但函数原型(prototype)由实例可访问的函数组成。因为
Object.prototype.toString
存在,所以 {}.toString
也存在 - 它是继承的。
- 是的,原型(prototype)链到此结束。
- 不,
.prototype
(或 Object.getPrototypeOf
返回的值)是一个您可以使用属性扩展的对象,以便实例继承这些属性。
你的例子:
var human = Object.create(null); // same as var human;
不,它创建了一个不继承任何东西的空对象。 var human;
将 human
设置为 undefined
- 这不是一个对象,而是一个原始值(在 JavaScript 中并非一切都是对象)。
var man = Object.create(human);
console.log(Object.getPrototypeOf(man));
//{}
//expected 'human'
Object.getPrototypeOf(man)
返回对象 human
。这是一个空对象;节点将其显示为 {}
。它不是一个字符串。事实上,对象可以赋值给多个变量。对象没有绑定(bind)变量,因此根据设计,根本不可能获得字符串。要检查相等性,您可以执行 Object.getPrototypeOf(man) === human
,这会产生 true
。
var person = Object.create(Object.prototype); // same as var person = {}
console.log(Object.getPrototypeOf(person));
//{}
//expected 'object'
这确实与 {}
相同 - 一个直接继承自 Object
的空对象。如上所述,原型(prototype)是 Object.prototype
而不是字符串。它看起来是空的,但那是因为 Object.prototype
的功能在默认情况下可用且隐藏。