大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 創(chuàng)建JavaScript對象的幾種方式

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

更新時間:2021-08-30 11:15:55 來源:動力節(jié)點(diǎn) 瀏覽861次

這里創(chuàng)建對象,主要介紹四種方式: 工廠模式、構(gòu)造函數(shù)模式、原型模式、組合使用構(gòu)造函數(shù)模式和原型模式。

1.工廠模式

工廠模式是用函數(shù)來封裝創(chuàng)建對象的細(xì)節(jié),在函數(shù)里面創(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;
}
var person1 = createPerson("a",29,"cc");
var person2 = createPerson("b",26,"cc");

但是工廠模式有個缺點(diǎn),就是對象識別問題,即它不知道一個對象的類型。

2.構(gòu)造函數(shù)模式

構(gòu)造函數(shù)模式,即通過給構(gòu)造函數(shù)傳遞不同的參數(shù),然后調(diào)用構(gòu)造函數(shù)來創(chuàng)建不同對象。

function Person(name,age,job){
    this.name = name;
    this.age = age;
    this.job = job;
    this.sayname = function(){
        alert(this.name);
    };
}
var person1 = new Person("a",29,"cc");
var person2 = new Person("b",26,"cc");

使用自定義的構(gòu)造函數(shù),可以將它的實(shí)例標(biāo)識為一種特定的類型,這正是構(gòu)造函數(shù)模式勝過工廠模式的地方。

比如(instanceof用于檢測對象類型):

person1 instanceof Person  //true    這里可以看到person1也是Person的實(shí)例,而工廠模式?jīng)]有能具體檢測對象類型的這一特定
person1 instanceof Object //true    所有對象均繼承自O(shè)bject

構(gòu)造函數(shù)模式的主要問題,就是每個方法都要在每個實(shí)例對象上重新創(chuàng)建一遍,j即使是同名方法或者兩個方法的作用一樣,而不同實(shí)例對象上的同名方法其實(shí)是不一樣的,這樣就造成了一種冗余,比如:

person1.sayname != person2.sayname

3.原型模式

有關(guān)原型和原型鏈的知識已經(jīng)在點(diǎn)擊打開鏈接介紹過了,這里不作過多介紹。

使用原型對象的好處就是,可以讓所有對象實(shí)例共享它所包含的屬性和方法。

function Person(){}
Person.prototype.name="a";
Person.prototype.age="29";
Person.prototype.job="cc";
Person.prototype.sayname = function(){
        alert(this.name);
};
var person1 = new Person();
var person2 = new Person();
這樣person1.sayname == person2.sayname

這樣一來,所有的屬性和方法都是大家(所有實(shí)例)共享的了,換句話說,person1和person2訪問的sayname和name等 都是同一個。

還有就是重寫原型的時候,切斷了現(xiàn)有原型與任何之前已存在的對象實(shí)例之間的聯(lián)系,它們引用的仍是最初的原型。可以通過在重寫原型里添加constructor:Person來建立新聯(lián)系。

原型模式的問題就是共享問題,在實(shí)例或原型上改變一下,在其他實(shí)例中都會相應(yīng)的改變。這樣我們引入組合使用構(gòu)造函數(shù)模式和原型模式。

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

組合使用中,構(gòu)造函數(shù)模式用于定義實(shí)例自己的屬性,原型模式用于定于方法和共享的屬性。

function Person(name,age,job){
    this.name = name;
    this.age = age;
    this.job = job;
}
Person.prototype = {
    constructor: Person,
    sayname: function(){
        alert(this.name);
    }
}
var person1 = new Person("a",29,"cc");
var person2 = new Person("b",26,"cc");

這種構(gòu)造函數(shù)與原型混合的模式,是目前使用較多的。其它創(chuàng)建對象的方式還有動態(tài)原型模式、寄生構(gòu)造函數(shù)模式、穩(wěn)妥構(gòu)造函數(shù)模式。

以上就是動力節(jié)點(diǎn)小編介紹的"創(chuàng)建JavaScript對象的幾種方式",希望對大家有幫助,想了解更多可查看JavaScript教程。動力節(jié)點(diǎn)在線學(xué)習(xí)教程,針對沒有任何Java基礎(chǔ)的讀者學(xué)習(xí),讓你從入門到精通,主要介紹了一些Java基礎(chǔ)的核心知識,讓同學(xué)們更好更方便的學(xué)習(xí)和了解Java編程,感興趣的同學(xué)可以關(guān)注一下。

提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 美女洗澡一级毛片 | 久青草视频在线观看 | 亚州综合激情另类久久久 | 操天天| 欧美精品中文字幕手机免费视频 | 国产欧洲亚洲 | 在线观看久草视频 | 一区二区三区免费视频 www | 国产成人综合日韩精品婷婷九月 | 亚洲精品国产精品乱码视色 | 亚洲欧美激情综合第一区 | 中文字幕波多野不卡一区 | 亚洲国产精品高清在线一区 | 国产精品久久自在自线观看 | 亚洲一区在线免费观看 | 在线视频 亚洲 | 99在线精品免费视频九九视 | 欧美一级毛片在线观看 | 日韩在线操 | 国内精品久久国产大陆 | 天天狠狠弄夜夜狠狠躁·太爽了 | 久久精品www| 亚洲国产激情一区二区三区 | 亚洲成年人免费网站 | 欧美精品福利在线视频 | 久青草国产手机在线视频 | 狠狠躁天天躁夜夜躁婷婷 | 精品一区二区三区在线播放 | 伊人久久亚洲综合 | 元龙第三季免费观看 | 亚洲精品a| 国产手机在线精品 | 亚洲 欧美 日韩在线综合福利 | 亚洲成色在线综合网站 | 视频精品一区二区三区 | 欧美精品九九99久久在观看 | 日日舔 | 色婷婷色综合缴情在线 | 香蕉成人在线 | 全黄一级裸片视频免费区 | 久久久久一级片 |