我所熟悉的創建方式有以下幾種:
一、使用物件字面量的方式{}
代碼如下:
var person ={
name: "zs",
age: 21,
family: ["lisi","lisa","wangwu"],
}
在使用同一介面創建多個物件時,會產生大量重復代碼
二、使用Object 關鍵字方式來創建 (工廠模式)
代碼如下:
var wcDog = new Object();
wcDog.name="旺財";
wcDog.age=3;
wcDog.work();
工廠模式解決了重復實體化多個物件的問題,但沒有解決物件識別的問題
三、用建構式來創建
代碼如下:
無參建構式:
function Person(){
}
var personOne=new Person();
//定義一個 function,如果有 new 關鍵字去"實體化",那
么該 function 可以看作是一個類
有參建構式
function Pet(name,age,hobby){
this.name=name;//this 作用域:當前物件
this.age=age;
this.hobby=hobby;
var maidou =new Pet("麥兜",5,"睡覺"); // 實體化/創建物件
可以使用有參建構式來實作,這樣定義更方便,擴展性更強
四、使用原型物件的方式 (prototype 關鍵字)
代碼如下:
function Dog(){ }
Dog.prototype.name ="旺財";
Dog.prototype.eat = function(){
alert(this.name + "是個吃貨");
}
var wangcai = new Dog();
wangcai.eat();
var dog2 = new Dog(); //創建實體dog2
dog2.name = "wangwu";
原型模式的好處是所有物件實體共享它的屬性和方法(即所謂的共有屬性)
還可以如上最后兩行代碼設定自己的屬性(方法),可以覆寫原型物件上的同名屬性(方法)
五、混合模式(原型和建構式)
建構式模式用于定義實體屬性,原型模式用于定義方法和共享的屬性
代碼如下:
function Car(name,price){
this.name=name;
this.price=price;
}
Car.prototype.sell=function(){
alert("我是"+this.name+",我現在賣"+this.price+"萬元");
}
var camry = new Car("凱美瑞",27);
camry.sell();
可以看出,混合模式共享著對相同方法的參考,又保證了每個實體有自己的私有屬性,最大限度的節省了記憶體
六、動態原型的方式
相當于混合模式的一種
代碼如下:
function Car(name,price){
this.name=name;
this.price=price;
if(typeof Car.sell=="undefined"){
Car.prototype.sell=function(){
alert("我是"+this.name+",我現在賣"+this.price+"萬元");
}
Car.sell=true;
}
}
var camry = new Car("凱美瑞",27);
camry.sell();
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/357132.html
標籤:其他
