亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

js創(chuàng)建對(duì)象的幾種模式

JaysonWang / 1223人閱讀

摘要:組合使用構(gòu)造函數(shù)模式和原型模式推薦例子所有實(shí)例共享原型中的屬性和方法相同的屬性在構(gòu)造函數(shù)中定義。穩(wěn)妥構(gòu)造函數(shù)模式穩(wěn)妥對(duì)象指的是沒有公共屬性,而且其方法也不再引用的對(duì)象。

1.工廠模式

例子:

function createPerson(name,age){
    var o = new Object();
    o.name = name;
    o.age = age;
    o.sayName = function () {
        alert(this.name);
    }
    return o;    
}
var person1 = createPerson("EvanChen",18,"Software Engineer");//創(chuàng)建一個(gè)對(duì)象

問題:沒有解決對(duì)象識(shí)別問題

    alert(person1 instanceof createPerson)//fasle 會(huì)發(fā)現(xiàn)其實(shí)并不存在一個(gè)createPerson類
2.構(gòu)造函數(shù)模式

例子:

    function Person(name,age){
        this.name = name;
        this.age = age;
        this.sayName = function(){
            alert(this.name);
        }
    }
    var p1 = new Person("EvanChen",18);//創(chuàng)建一個(gè)Person類

用new操作符調(diào)用構(gòu)造函數(shù)經(jīng)歷了以下4個(gè)步驟:

(1)創(chuàng)建一個(gè)新對(duì)象

(2)將構(gòu)造函數(shù)的作用域賦給新對(duì)象

(3)執(zhí)行構(gòu)造函數(shù)中的代碼

(4)返回新對(duì)象

解決了工廠模式兌現(xiàn)識(shí)別問題:

alert(typeof(p1));// Person
alert(p1 instanceof(Person));// true
3.原型模式

例子:

    function Person(){        
    }
    Person.prototype.name = "EvanChen";
    Person.prototype.age= 18;
    Person.prototype.sayName= function(){
        alert(this.name);
    }
    
    var p1 = new Person();
    p1.sayName(); //"EvanChen"
    
    var p2 = new Person();
    p2.sayName(); //"EvanChen"
    
    alert(p1.sayName == p2.sayName); //true
    

將所有屬性和方法都加在Person的prototype屬性中,因此新對(duì)象具有相同的屬性和方法。

4.組合使用構(gòu)造函數(shù)模式和原型模式(推薦)

例子:

function Person(name,age){
    this.name = name;
    this.age = age;
    this.friends = ["Shelby","Court"];
};

Person.prototype = {
    constructor:Person,
    sayName:function(){
        alert(this,name);
    }
}
//Person.prototype.sayName = function(){
//   return this.name;
//};

var person1 = new Person("EvanChen",18);
var person2 = new Person("Greg",16);

person1.friends.push("Van");
alert(person1.friends);//"Shelby,Court,Van"
alert(person2.friends);//"Shelby,Court"
alert(person1.friends == person2.friends);//false
alert(person1.sayName == person2.sayName );//true

所有實(shí)例共享原型中的屬性constructor和方法sayName(),相同的屬性在構(gòu)造函數(shù)中定義。

5.動(dòng)態(tài)原型模式(推薦)

例子:

function Person(name,age){
    this.name = name;
    this.age = age;
    if (typeof this.sayName != "function"){
        Person.prototype.sayName = function(){
            alert(this.name);
        };
    }
};
var person1 = new Person("EvanChen",18);
person1.sayName();

在sayName()方法不存在的情況下,才會(huì)將它添加到原型中,當(dāng)原型完成初始化后,能夠立即在所有實(shí)例中得到共享。

6.寄生構(gòu)造函數(shù)模式

基本思想是:創(chuàng)建一個(gè)函數(shù),該函數(shù)的作用僅僅是封裝對(duì)象的代碼,然后再返回新構(gòu)建函數(shù)的對(duì)象
例子:

function SpecialArray(){
    var values = new Array();//創(chuàng)建數(shù)組
    values.push.apply(values,arguments);//添加值
    values.toPipedString = function () {
        return this.join("|");
    }//添加方法
    return values//返回?cái)?shù)組    
}

var colors = new SpecialArray("red","blue","green");
alert(colors.toPipedString());//red|blue|green

構(gòu)造函數(shù)返回的對(duì)象與構(gòu)造函數(shù)外部創(chuàng)建的對(duì)象沒有什么不同,因此不能依賴instanceof操作符來確定對(duì)象類型。

7.穩(wěn)妥構(gòu)造函數(shù)模式

穩(wěn)妥對(duì)象指的是沒有公共屬性,而且其方法也不再引用this的對(duì)象。穩(wěn)妥對(duì)象最適合在一些安全的環(huán)境中,或者防止數(shù)據(jù)被其他應(yīng)用程序刪改時(shí)使用。

例子:

function Person(name, age) {
    //創(chuàng)建要返回的對(duì)象
    var o = new Object();
    //定義私有變量和函數(shù)
    o.sayName = function (){
        alert(name);
    }
    return o;
}

var person1 = Person("EvanChen", 18);
person1.sayName();//"EvanChen"

在這種模式創(chuàng)建的對(duì)象中,除了使用sayName()方法外,沒有其他方法訪問name的值。

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

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/78910.html

相關(guān)文章

  • js 創(chuàng)建對(duì)象幾種方式

    摘要:可以無數(shù)次地調(diào)用這個(gè)函數(shù),而每次它都會(huì)返回一個(gè)包含三個(gè)屬性一個(gè)方法的對(duì)象構(gòu)造函數(shù)模式原型模式組合使用構(gòu)造函數(shù)模式和原型模式創(chuàng)建自定義類型的最常見方式,就是組合使用構(gòu)造函數(shù)模式與原型模式。 JS中創(chuàng)建對(duì)象的主要模式有 工廠模式 工廠模式抽象了具體創(chuàng)建對(duì)象的過程例如 function?createPerson(name,?age,?job){ ????var?o?=?new?Object(...

    seanlook 評(píng)論0 收藏0
  • JS創(chuàng)建對(duì)象幾種設(shè)計(jì)模式

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

    Galence 評(píng)論0 收藏0
  • 細(xì)節(jié):js 創(chuàng)建對(duì)象幾種模式舉例

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

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

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

    Invoker 評(píng)論0 收藏0
  • JS對(duì)象創(chuàng)建幾種方式

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

    ixlei 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<