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
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_36711388/article/details/90216709