JavaScript JS原型链 图详解
function Fn() {
}
Fn.prototype.n = 1;
var fn = new Fn();
Fn.prototype = {}
var fn2 = new Fn();
function foo() {
}
console.log(Fn instanceof Function); //true
console.log(fn instanceof Function); //false-->Object
console.log(foo instanceof Function); //true
console.log(Function instanceof Function); //true !!!
console.log(Object instanceof Function); //true!!!
console.log(Function instanceof Object); //true
console.log(Object instanceof Object); //true
console.log(foo.__proto__ == Function.__proto__) //true
console.log(Object.__proto__ == Function.__proto__) //true
console.log(Object.constructor == Function) //true
console.log(foo.__proto__.constructor == Function.__proto__.constructor) //true
console.log(Function.prototype == Function.__proto__); //true
console.log(Function == Function.__proto__.constructor); //true
console.log(foo == Function.__proto__.constructor); //false
console.log(Object.__proto__.constructor instanceof Function); //true
- 显示原型和隐式原型
- 每个函数(function)都有prototype,即显示原型,指向原型对象,默认为空Object实例,Object原型除外。相当于在创建时,执行了
this.prototype={}
- 每个实例对象(instance)有__proto__,即隐式原型,指向类的原型对象,相当于在创建对象时,执行了
this.__proto__=类.prototype
原型对象中有一个属性constructor构造器,指向函数对象。
- constructor属性
- 原型对象有一个constructor属性,指向函数对象。
- 如上图所示,Function.prototype.constructor==Function不能是foo。
- 方法一般定义在原型中,属性一般通过构造函数定义在对象上