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)

js原型链的详细介绍
M.prototype等于原型对象,原型对象是通过constructor关联构造函数的
js原型链的详细介绍

实例对象的_proto_等于构造函数的prototype
js原型链的详细介绍
通过原型链的方式找到原型对象,原型对象的方法被不同的实例共有

M.prototype.say=function(){
	console.log('say hi')
}
var o5 =new M('o5')

js原型链的详细介绍
构造函数的M._proto_等于Function.prototype:M的构造函数是Function,也可以理解成M这个普通函数是Function这个构造函数的实例化。
js原型链的详细介绍
实例对象的_proto_和构造函数的prototype是引用的同一个地址
js原型链的详细介绍
o3是构造函数的实例化,也是构造函数的原型的实例化,所以判断是不是直接的实例化,要用constractor
js原型链的详细介绍
js原型链的详细介绍

var new2=function(func){
    var o=Object.create(func.prototype);
    var k=func(o);
    if(typeof k==='Object'){
        return k
    }else{
        return o
    }
}

js原型链的详细介绍
o4是通过原型链来找name属性的本身是个新的对象p,所以o4是空object
js原型链的详细介绍