js使用函式來建立物件
阿新 • • 發佈:2021-01-20
【直接使用函式建立物件】
使用new替換this指標-----例項化
//建構函式
function pet(name,sex,age){
this.name=name;
this.sex=sex;
this.age=age;
this.play=function(){
return"玩耍";
};
this.eat=function(){
return"吃飯";
};
}
var bella= new pet(); //使用new替換this指標
函式中的this指向window
這裡用new例項化了pet這個函式,構建出了新的物件,替換this指標
原型鏈_proto_上的構造constructor指向建構函式pet()本身
例項物件的原型鏈=函式的原型物件
console.log(bella.proto == pet.prototype);
原型物件的構造指向本身
console.log(pet.prototype.constructor==pet);
【自定義一個new】
//自定義new
function people(name,sex,age){
this.name= name;
this.sex=sex;
this.age=age;
this.study=function(){
return"學習";
};
this.eat=function(){
return"吃飯";
};
}
var New=function(xc){ //構建形參xc
var obj={};
console.log(obj);
obj.__proto__=xc.prototype; // 讓kk的原型鏈等於形參xc的原型物件
xc.prototype. constructor=xc;
console.log(obj);
//獲取屬性
var args=Array.prototype.slice.call(arguments,1);
//Array陣列中的prototype原型中的slice檢取方法 call替換物件 argumens
console.log(args);
xc.apply(obj,args);
return obj;
};
New(people); //將people傳給New
var wang=New(people,"jiseng",19,"男"); //傳值
console.log(wang);
先自定義一個函式New 在構建一個形參xc
最後在New(people)將函式people傳進New中實現例項化
其中args是函式的引數列表值,裡面是如下圖將傳進去的屬性值以集合的形式儲存
var args=Array.prototype.slice.call(arguments,1);
陣列Array的方法在他的原型prototype物件上
因此要通過取陣列上的原型物件才能取到clice方法。
(arguments,1)的意思是擷取argument從一開始到完擷取