原型继承 javascript
prototypical inheritance javascript
来自 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__
都引用该实例?
提前致谢。
如果你 console.log(typeof(Ojbect)) 和 console.log(typeof(Array)) 你得到一个 "function"
所有不是基本类型(undefined,null ...)的都是对象或 JavaScript 中的 "an instance",意味着函数继承自对象。
来自 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__
都引用该实例?
提前致谢。
如果你 console.log(typeof(Ojbect)) 和 console.log(typeof(Array)) 你得到一个 "function" 所有不是基本类型(undefined,null ...)的都是对象或 JavaScript 中的 "an instance",意味着函数继承自对象。