javascript - 理解 JavaScript 中的原型(prototype)

标签 javascript oop

<分区>

Possible Duplicate:
How does JavaScript .prototype work?

来自 Java 背景,我正在尝试理解 javascript。

请让我知道这些是否正确。

  1. 就像在 java 中一样,有一个至高无上的对象,所有其他对象都继承自它。
  2. 原型(prototype)属性就像一个指针,指向父对象(java中的类)
  3. 对于“Object”对象,原型(prototype)为空。
  4. 原型(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'

最佳答案

  1. 是的,Object.create(null) 除外,它不继承任何东西。
  2. 不确定“父对象”是什么,但函数原型(prototype)由实例可访问的函数组成。因为 Object.prototype.toString 存在,所以 {}.toString 也存在 - 它是继承的
  3. 是的,原型(prototype)链到此结束。
  4. 不,.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 的功能在默认情况下可用且隐藏。

关于javascript - 理解 JavaScript 中的原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11693145/

相关文章:

javascript - Twitter Bootstrap Popover 不起作用?

c++ - 无法找出正确的方法(模式...)

java - 程序的main方法中应该有多少代码?

java - 如何将现有的过程代码转换为使用类?

java - java中抽象类的抽象方法和接口(interface)的抽象方法的区别

javascript - javascript 中访问函数和嵌套函数的区别

javascript - "A promise was created in a handler but was not returned from it"

javascript - 在 jQuery 选择器中混合逻辑 AND 和 OR

php - 调用父类方法

javascript - 在 forRoot 中使用获取的配置