js原型链的详细介绍
1.创造对象的方法:
//第一种方式:字面量
var o1 ={name:'o1'};
var o2=new Object({name:'o2'});
//第二种方式:通过构造函数
var M=function(name){this.name=name};
var o3=new M('o3')
//第三种方式:Object.create
var p={name:'p'}
var o4=Object.create(p)
M.prototype等于原型对象,原型对象是通过constructor关联构造函数的
实例对象的_proto_等于构造函数的prototype
通过原型链的方式找到原型对象,原型对象的方法被不同的实例共有
M.prototype.say=function(){
console.log('say hi')
}
var o5 =new M('o5')
构造函数的M._proto_等于Function.prototype:M的构造函数是Function,也可以理解成M这个普通函数是Function这个构造函数的实例化。
实例对象的_proto_和构造函数的prototype是引用的同一个地址
o3是构造函数的实例化,也是构造函数的原型的实例化,所以判断是不是直接的实例化,要用constractor
var new2=function(func){
var o=Object.create(func.prototype);
var k=func(o);
if(typeof k==='Object'){
return k
}else{
return o
}
}
o4是通过原型链来找name属性的本身是个新的对象p,所以o4是空object