成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

js 創(chuàng)建對象的幾種方式

seanlook / 1815人閱讀

摘要:可以無數次地調用這個函數,而每次它都會返回一個包含三個屬性一個方法的對象構造函數模式原型模式組合使用構造函數模式和原型模式創(chuàng)建自定義類型的最常見方式,就是組合使用構造函數模式與原型模式。

JS中創(chuàng)建對象的主要模式有

工廠模式

工廠模式抽象了具體創(chuàng)建對象的過程例如

function?createPerson(name,?age,?job){
????var?o?=?new?Object();
????o.name?=?name;
????o.age?=?age;
????o.job?=?job;
????o.sayName?=?function(){
????????alert(this.name);
????};
????return?o;
}

函數createPerson()能夠根據接受的參數來構建一個包含所有必要信息的Person對象??梢詿o數次地調用這個函數,而每次它都會返回一個包含三個屬性一個方法的對象

構造函數模式
function?Person(name,?age,?job){
????this.name?=?name;
????this.age?=?age;
????this.job?=?job;
????this.sayName?=?function(){
????????alert(this.name);
????};
}
原型模式
function Person() {}
Person.prototype.name = "Nicholas";
Person.prototype.age = 29;
Person.prototype.job = "Software Engineer";
Person.prototype.sayName = function() {
    alert(this.name);
};
var person1 = new Person(); 
//"Nicholas"
person1.sayName();
var person2 = new Person();
//"Nicholas"
person2.sayName();
//true
alert(person1.sayName == person2.sayName);
組合使用構造函數模式和原型模式

創(chuàng)建自定義類型的最常見方式,就是組合使用構造函數模式與原型模式。構造函數模式用于定義實例屬性,而原型模式用于定義方法和共享的屬性。結果,每個實例都會有自己的一份實例屬性的副本,但同時又共享著對方法的引用,最大限度地節(jié)省了內存。另外,這種混成模式還支持向構造函數傳遞參數;可謂是集兩種模式之長。下面的代碼重寫了前面的例子。

function Person(name, age, job) {
    this.name = name;
    this.age = age;
    this.job = job;
    this.friends = ["Shelby", "Court"];
}
Person.prototype = {
    constructor: Person,
    sayName: function() {
        alert(this.name);
    }
}
var person1 = new Person("Nicholas", 29, "Software Engineer");
var person2 = new Person("Greg", 27, "Doctor");
person1.friends.push("Van"); 
//"Shelby,Count,Van"
alert(person1.friends);
//"Shelby,Count"
alert(person2.friends);
//false
alert(person1.friends === person2.friends);
//true
alert(person1.sayName === person2.sayName);

在這個例子中,實例屬性都是在構造函數中定義的,而由所有實例共享的屬性constructor和方法sayName()則是在原型中定義的。而修改了person1.friends(向其中添加一個新字符串),并不會影響到person2.friends,因為它們分別引用了不同的數組。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/92812.html

相關文章

  • JS對象創(chuàng)建幾種方式

    摘要:上述每次都需要寫可以優(yōu)化但是此處改變了的屬性,故我們需要顯示的指出構造函數和原型組合模式二創(chuàng)建空對象前兩種方式創(chuàng)建的對象含有原型,最后一種方式創(chuàng)建的對象無原型,是真正意義上的空對象參考資料 一.創(chuàng)建對象的幾種方式 1. 使用new關鍵字創(chuàng)建 var ob = new Object() ob.name = name ob.say = function() {} 2.使用字面量的方式創(chuàng)建 ...

    ixlei 評論0 收藏0
  • Js創(chuàng)建對象幾種方式

    摘要:對象字面量的方式今年創(chuàng)建實例的發(fā)明者我是今年屬性是可以動態(tài)添加,修改的構造函數無參構造函數有參構造函數我叫,今年歲實例化創(chuàng)建對象調用方法由于指針在對象實例的時候發(fā)生改變指向新的實例。是我的名字混合方式構造函數原型我是,今年 javascript創(chuàng)建對象簡單的說,無非就是使用內置對象或各種自定義對象,當然還可以用JSON;方法很多,也能混合使用。 對象字面量的方式: var pers...

    willin 評論0 收藏0
  • JS創(chuàng)建對象幾種設計模式

    摘要:構造函數模式定義構造函數模式是語言創(chuàng)建對象的通用方式。但兩種語言用構造函數創(chuàng)建對象的方式略有不同在中沒有類的概念,函數即為一等公民,因此,不必顯式聲明某個類,直接創(chuàng)建構造函數即可,類的方法和屬性在構造函數中或原型對象上處理。 工廠模式 定義:工廠模式非常直觀,將創(chuàng)建對象的過程抽象為一個函數,用函數封裝以特定接口創(chuàng)建對象的細節(jié)。通俗地講,工廠模式就是將創(chuàng)建對象的語句放在一個函數里,通...

    Galence 評論0 收藏0
  • js面向對象淺析---對象創(chuàng)建幾種常見方式

    摘要:前言雖然使用構造函數或者使用對象字面量可以很方便的用來創(chuàng)建一個對象,但這種方式有一個明顯的缺點使用一個接口創(chuàng)建多個對象會產生很多冗余的代碼。即調用構造函數所創(chuàng)建的那個對象的原型對象好處是可以讓所有對象的實例共享他的屬性的方法。 前言 雖然使用Object構造函數或者使用對象字面量可以很方便的用來創(chuàng)建一個對象,但這種方式有一個明顯的缺點:使用一個接口創(chuàng)建多個對象會產生很多冗余的代碼。因此...

    Invoker 評論0 收藏0
  • 細節(jié):js 創(chuàng)建對象幾種模式舉例

    摘要:工廠模式不推薦應該把方法放在函數的外面,避免重復創(chuàng)建該方法定義的不是構建函數,因該使用方法創(chuàng)建實例,而不是方法不要忘記在函數的最后構造函數模式不推薦使用指代,函數無需明確應該把方法放在函數的外面,避免重復創(chuàng)建該方法原型模式不推薦函數中不對屬 工廠模式(不推薦) var sayName = function(){ return this.name; }; function cr...

    laznrbfe 評論0 收藏0

發(fā)表評論

0條評論

seanlook

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<