原型继承javascript

时间:2017-09-12 22:17:17

标签: javascript inheritance prototype proto

来自Java背景,Javascript是一个我试图掌握的新世界。
我对原型继承如何正常工作有些不满。
我从__proto__ VS. prototype in JavaScript和其他来源获得的内容是有帮助的,但我真的想确保我掌握这个主题。以下陈述是否正确?

__proto__是对象的属性,是表示对象原型的对象。反过来,此对象也可以具有__proto__属性,直到到达Object对象的末尾。

prototype是函数对象的属性,是一个对象本身。当使用new关键字从函数实例化对象时,该新实例的__proto__将是构造函数的prototype属性。例如:

let random =  new Array();

console.log(random.__proto__);   //logs the object which is the prototype of random
console.log(Array.prototype);    //logs the same object as random.__proto__

console.log(random.__proto__.__proto__);  // logs the Object prototype object
console.log(Object.prototype);        // logs the same object as random.__proto__.__proto__

当对象相互测试相等时,它们是以下代码中的相同对象:

console.log(random.__proto__ === Array.prototype);               // logs true
console.log(random.__proto__.__proto__ === Object.prototype );   // logs true

由于通过引用测试对象的相等性,这是否意味着实际上有一个Object.prototype对象的实例,并且所有对象__proto__都引用了这个实例?

提前致谢。

1 个答案:

答案 0 :(得分:1)

如果你是console.log(typeof(Ojbect))和console.log(typeof(Array))你得到了一个“功能” 所有不是原始类型(undefined,null ...)都是JavaScript中的对象或“实例”,意味着函数继承自对象。