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