__proto__
__proto__ 指向它对应的原型对象
var one = {
x: 1
};
var two = new Object();
// 对象的__proto__指向对象的原型对象
var result1 = one.__proto__ === Object.prototype;
var result2 = two.__proto__ === Object.prototype;
var result3 = one.toString() === two.toString();
// 函数原型对象的__proto__指向对象的原型对象
var result4 = Function.prototype.__proto__ === Object.prototype;
// 原型链到Object.prototype终止
var result5 = Object.prototype.__proto__ === null;
console.log(result1);
console.log(result2);
console.log(result3);
console.log(result4);
console.log(result5);
// 输出
// true
// true
// true
// true
// true
prototype
- 只有函数才有 prototype 属性
- 每个函数创建后都有 prototype 属性,一旦把这个函数当作构造函数,调用 new 操作符,js 就会创建构造函数的实例
- 创建一个实例,是通过__proto__指向构造函数的 prototype 来实现继承构造函数 prototype 的所有属性和方法的
function A() {}
var a = new A();
console.log(a);
// A.prototype.__proto__ 是Object.prototype 也就是说A函数继承了对象的一堆属性和方法
// A {}
// __proto__:
// constructor: ƒ A()
// __proto__: Object
constructor
function A() {}
// 对象的constructor属性是Object
console.log({}.constructor === Object);
// A的protoype对象的constructor是A
console.log(A.prototype.constructor === A);
// A的constructor是Function
console.log(A.constructor === Function);
参考
从__proto__和 prototype 来深入理解 JS 对象和原型链
理解 js 中的 prototype, constructor, __proto__
确认评论邮箱
邀请制评论