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

posted @ 2018-10-21 03:23  Dai Hanlong  阅读(265)  评论(0编辑  收藏  举报