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
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章