来自Java背景,我正在尝试理解javascript。
如果这些是正确的,请告诉我。
我正在使用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'
答案 0 :(得分:0)
首先,在尝试使用它之前,需要阅读create
方法。
其次,以下列方式调用对象:
var human = {}, man = {}, person = {};
第三,这不是Java。在Java类中,对类的理解非常重要。原型在JavaScript中是完全可选的。当代码通过不同范围的引用重复使用函数时,原型提供的唯一性能优势就来了。如果这种编码风格不适用于您,那么您可能不需要使用原型。
原型继承自父级或某些祖先对象。 JavaScript解析器将首先查找本地分配,如果不存在,则将检查当前对象的原型是否存在命名引用。简而言之,在编写JavaScript时,您需要了解这一点。
答案 1 :(得分:0)
Object.create(null)
除外,它不会从任何内容继承。Object.prototype.toString
存在,{}.toString
也存在,因此继承了。.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
。这是一个空对象;节点将其显示为{}
。 不是字符串。实际上,可以将对象分配给多个变量。对象没有绑定到它的变量,因此根据设计,根本不可能获得字符串。要检查相等性,您可以Object.getPrototypeOf(man) === human
生成true
。
var person = Object.create(Object.prototype); // same as var person = {}
console.log(Object.getPrototypeOf(person));
//{}
//expected 'object'
这确实与{}
相同 - 一个直接从Object
继承的空对象。如上所述,原型是Object.prototype
而不是字符串。它看起来是空的,但这是因为默认情况下Object.prototype
的功能是可用的并且是隐藏的。
答案 2 :(得分:0)
首先,IMO,不要从节点开始。如果您还不知道javascript,节点会将您拖入流沙池中。其次,当我开始使用基于函数的代码时,OO然后才转向原型。但如果你真的想知道,这个问题已经通过here回答了。如果您还有其他问题,请随时问我!