js中的对象 函数 原型

// 关于 Function Object 和 proto prototype
// 1.每一个对象实例都有一个 proto 属性,这个属性就是指向 对象构造函数的原型.
let b = new Function();
console.log(b.__proto__ === Function.prototype); // true
console.log(Function.prototype); // [Function]
console.log(Function.prototype.prototype); // undefined

// 2. Function 是 Object, Object 也是 Function
console.log(Function instanceof Object); // true
console.log(Object instanceof Function); // true
console.log(b instanceof Object); // true
console.log(b instanceof Function); // true

// Function 和 Object 区别
// 1.由 Function 创造出来的实例对象,既是 Object 又是 Function
// 2.由 Object 创造出来的实例对象, 是 Object,但不是 Function
let a = new Object();
console.log(a instanceof Object); // true
console.log(a instanceof Function); // false

//
console.log(a.__proto__ === Object.prototype); // true
console.log(Object.prototype); // {}
console.log(Object.prototype.prototype); // undefined

// 如何形成原型链?
class A{
constructor(){
this.name = 'a';
}
sayHi(){
console.log('this is a say hi!');
}
}
class B extends A{
constructor(){
super();
this.age = 2;
}
}

console.log(A.prototype); // {}
console.log(B.prototype); // {}

// 下面演示了 原型链
// B->A->Object
let obj = new B();
console.log(obj.__proto__ === B.prototype); // true;
console.log(B.prototype.__proto__ === A.prototype); // true
console.log(A.prototype.__proto__ === Object.prototype);
console.log(Object.prototype.__proto__); // null

console.log(A.__proto__ === Function.prototype); // true
console.log(B.__proto__ === Function.prototype); // false
console.log(B.__proto__.constructor); // [Function: Function]

// 只有 通过 new A(); 创建的对象的 proto 才指向 A.prototype

// 疑问: B.__proto__ 到底指向哪?
console.log(B.__proto__ === A.prototype); // false

猜你喜欢

转载自www.cnblogs.com/daihanlong/p/9823945.html