最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript設(shè)計(jì)模式之對(duì)象工廠函數(shù)與構(gòu)造函數(shù)詳解

 更新時(shí)間:2015年07月30日 10:44:42   投稿:mrr  
這篇文章主要介紹了javascript設(shè)計(jì)模式之對(duì)象工廠函數(shù)與構(gòu)造函數(shù)詳解,使用對(duì)象字面量,或者向空對(duì)象中動(dòng)態(tài)地添加新成員,是最簡(jiǎn)單易用的對(duì)象創(chuàng)建方法,除了這兩種常用的對(duì)象創(chuàng)建方式,JavaScript還提供了其他方法創(chuàng)建對(duì)象,需要的朋友可以參考下

下面通過(guò)文字詳解加代碼分析的方式給大家分享下javascript設(shè)計(jì)模式之對(duì)象工廠函數(shù)與構(gòu)造函數(shù)的相關(guān)知識(shí)。

概述使用對(duì)象字面量,或者向空對(duì)象中動(dòng)態(tài)地添加新成員,是最簡(jiǎn)單易用的對(duì)象創(chuàng)建方法。然而,除了這兩種常用的對(duì)象創(chuàng)建方式,JavaScript還提供了其他方法創(chuàng)建對(duì)象。1).使用工廠函數(shù)創(chuàng)建對(duì)象我們可以編寫(xiě)一個(gè)函數(shù),此函數(shù)的功能就是創(chuàng)建對(duì)象,可將其.

概述

使用對(duì)象字面量,或者向空對(duì)象中動(dòng)態(tài)地添加新成員,是最簡(jiǎn)單易用的對(duì)象創(chuàng)建方法。
然而,除了這兩種常用的對(duì)象創(chuàng)建方式,JavaScript還提供了其他方法創(chuàng)建對(duì)象。
1).使用工廠函數(shù)創(chuàng)建對(duì)象

我們可以編寫(xiě)一個(gè)函數(shù),此函數(shù)的功能就是創(chuàng)建對(duì)象,可將其稱為“對(duì)象工廠方法”。

復(fù)制代碼 代碼如下:

//工廠函數(shù)    
 function createPerson(name, age, job) {        
 var o = new Object();        
 o.name = name;        
 o.age = age;        
 o.job = job;        
 o.sayName = function () {            
 console.info(this.name);        
 };        
 return o;      } //使用工廠函數(shù)創(chuàng)建對(duì)象    
 var person1 = createPerson('張三', 29, '軟件工程師');    
 var person2 = createPerson('李四', 40, '醫(yī)生');

2).定義對(duì)象構(gòu)造函數(shù)

  a).對(duì)象構(gòu)造函數(shù)首字母大寫(xiě)
  b).內(nèi)部使用this關(guān)鍵字給對(duì)象添加成員
  c).使用new關(guān)鍵字調(diào)用對(duì)象構(gòu)造函數(shù)

復(fù)制代碼 代碼如下:

//定義對(duì)象“構(gòu)造”函數(shù)     
function Person(name, age, job) {
this.name = name;        
 this.age = age;         
this.job = job;         
this.sayName = function () {            

  console.info(this.name);         
};     
} //使用new調(diào)用對(duì)象構(gòu)造函數(shù)創(chuàng)建對(duì)象    
 var p1 = new Person('張三', 29, '軟件工程師');     

var p2 = new Person('李四', 40, '醫(yī)生');

以普通方式調(diào)用的“構(gòu)造函數(shù)”

構(gòu)造函數(shù)其實(shí)也是一個(gè)函數(shù),不同之處在于調(diào)用它時(shí)必須要加一個(gè)“new”關(guān)鍵字,如果不加這個(gè)關(guān)鍵字,則對(duì)它的調(diào)用被認(rèn)為是普通函數(shù)調(diào)用。

復(fù)制代碼 代碼如下:

 //作為普通函數(shù)調(diào)用的構(gòu)造函數(shù),通過(guò)this添加的屬性,
//成為了window對(duì)象的屬性與方法。
console.info(window.name);//張三
console.info(window.age); //29
console.info(window.job); //軟件工程師

對(duì)象構(gòu)造函數(shù)長(zhǎng)得這個(gè)樣:

復(fù)制代碼 代碼如下:

function Person (name) {
this.name = name;
 this.say = function () {
 return "I am " + this.name;
  };
}

實(shí)際上是這樣(示意):

復(fù)制代碼 代碼如下:

function Person (name) {
// var this = {};
 this.name = name;
 this.say = function () {
return "I am " + this.name;
 };
    // return this;
}

構(gòu)造函數(shù)完成的工作

1. 創(chuàng)建一個(gè)新的對(duì)象
2. 讓構(gòu)造函數(shù)的this引用這一新創(chuàng)建的對(duì)象
3. 執(zhí)行構(gòu)造函數(shù)中的代碼,這些代碼通常完成向新對(duì)象添加屬性的工作
4. 向外界返回新創(chuàng)建的對(duì)象引用。
對(duì)象構(gòu)造函數(shù)與對(duì)象工廠方法的區(qū)別

1. 對(duì)象構(gòu)造函數(shù)中沒(méi)有顯式的對(duì)象創(chuàng)建代碼
2. 新對(duì)象應(yīng)具備的屬性與方法是通過(guò)this引用添加的.
3. 對(duì)象構(gòu)造函數(shù)中沒(méi)有return語(yǔ)句
 通常會(huì)把對(duì)象構(gòu)造函數(shù)的首字母設(shè)置為大寫(xiě)的,以區(qū)別于普通函數(shù)。
對(duì)象的constructor屬性

a).使用對(duì)象工廠函數(shù)創(chuàng)建對(duì)象,每個(gè)對(duì)象的constructor屬性引用Object()

 

復(fù)制代碼 代碼如下:

var person = createPerson('張三', 29, '軟件工程師');
 //使用工廠方法創(chuàng)建對(duì)象,

其constructor屬性引用Object()函數(shù)
console.info(person1.constructor === Object); 

//true

b).使用對(duì)象構(gòu)造函數(shù)創(chuàng)建對(duì)象,每個(gè)對(duì)象的constructor屬性引用這個(gè)構(gòu)造函數(shù)

復(fù)制代碼 代碼如下:

var p = new Person('張三', 29, '軟件工程師');
//使用對(duì)象構(gòu)造函數(shù)創(chuàng)建對(duì)象,
//每個(gè)對(duì)象的constructor屬性,引用這個(gè)構(gòu)造函數(shù)
console.info(p.constructor === Person);
 //true如何避免“忘記”new?可以使用arguments.callee解決這個(gè)問(wèn)題     
//了解arguments.callee的作用    
function TestArgumentsCallee()
 {         
console.info(this);         
console.info(this instanceof TestArgumentsCallee);        
 console.info(this instanceof arguments.callee);    
 };     
TestArgumentsCallee(); //window                                         

//false                                         
//false     
new TestArgumentsCallee(); 
//TestArgumentsCallee             
//true                                             

  //true

于是,可以直接用arguments.callee

復(fù)制代碼 代碼如下:

 //避免忘記new    
 function MyObject(value)
{        
 if (!(this instanceof arguments.callee))

{            
 //如果調(diào)用者忘記加上new了,就加上new再調(diào)用一次             

return new MyObject(value);        
 }        
 this.prop = value;    
 }     
//測(cè)試     
var obj1 = new MyObject(100);    
 console.info(obj1.prop);//100    
 var obj2 = MyObject(200);       
console.info(obj2.prop); //200

以上內(nèi)容就是javascript設(shè)計(jì)模式之對(duì)象工廠函數(shù)與構(gòu)造函數(shù)詳解,希望大家喜歡。

相關(guān)文章

  • javascript的幾種寫(xiě)法總結(jié)

    javascript的幾種寫(xiě)法總結(jié)

    下面小編就為大家?guī)?lái)一篇javascript的幾種寫(xiě)法總結(jié)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-09-09
  • 淺談javascript中createElement事件

    淺談javascript中createElement事件

    本文通過(guò)示例向大家簡(jiǎn)單介紹了javascript中的createElement事件,需要的朋友可以參考下
    2014-12-12
  • JavaScript基礎(chǔ)心法 深淺拷貝(淺拷貝和深拷貝)

    JavaScript基礎(chǔ)心法 深淺拷貝(淺拷貝和深拷貝)

    淺拷貝和深拷貝都是對(duì)于JS中的引用類(lèi)型而言的,淺拷貝就只是復(fù)制對(duì)象的引用,如果拷貝后的對(duì)象發(fā)生變化,原對(duì)象也會(huì)發(fā)生變化。只有深拷貝才是真正地對(duì)對(duì)象的拷貝
    2018-03-03
  • Javascript學(xué)習(xí)筆記之 對(duì)象篇(三) : hasOwnProperty

    Javascript學(xué)習(xí)筆記之 對(duì)象篇(三) : hasOwnProperty

    判斷一個(gè)屬性是定義在對(duì)象本身而不是繼承自原型鏈,我們需要使用從 Object.prototype 繼承而來(lái)的 hasOwnProperty 方法。 hasOwnProperty 方法是 Javascript 中唯一一個(gè)處理對(duì)象屬性而不會(huì)往上遍歷原型鏈的。
    2014-06-06
  • Javascript核心讀書(shū)有感之類(lèi)型、值和變量

    Javascript核心讀書(shū)有感之類(lèi)型、值和變量

    這篇文章主要介紹了Javascript核心讀書(shū)有感之類(lèi)型、值和變量,需要的朋友可以參考下
    2015-02-02
  • JavaScript的RequireJS庫(kù)入門(mén)指南

    JavaScript的RequireJS庫(kù)入門(mén)指南

    這篇文章主要介紹了JavaScript的RequireJS庫(kù)入門(mén)指南,RequireJS庫(kù)的人氣近來(lái)攀升很快,需要的朋友可以參考下
    2015-07-07
  • JavaScript中的函數(shù)嵌套使用

    JavaScript中的函數(shù)嵌套使用

    這篇文章主要介紹了JavaScript中的函數(shù)嵌套使用,是JavaScript入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-06-06
  • IE的不合理設(shè)計(jì)和Bugs

    IE的不合理設(shè)計(jì)和Bugs

    IE的不合理設(shè)計(jì)和Bugs...
    2006-12-12
  • 深入理解JavaScript系列(18):面向?qū)ο缶幊讨瓻CMAScript實(shí)現(xiàn)

    深入理解JavaScript系列(18):面向?qū)ο缶幊讨瓻CMAScript實(shí)現(xiàn)

    這篇文章主要介紹了深入理解JavaScript系列(18):面向?qū)ο缶幊讨瓻CMAScript實(shí)現(xiàn),本文講解了數(shù)據(jù)類(lèi)型、原始值類(lèi)型、Object類(lèi)型、動(dòng)態(tài)性、內(nèi)置對(duì)象、原生對(duì)象及宿主對(duì)象等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • javascript真的不難-回顧一下基礎(chǔ)知識(shí)

    javascript真的不難-回顧一下基礎(chǔ)知識(shí)

    先來(lái)學(xué)習(xí)一下Javascript語(yǔ)言中的基礎(chǔ)知識(shí)問(wèn)題其時(shí)對(duì)于每種編程語(yǔ)言來(lái)說(shuō)基礎(chǔ)知識(shí)都是大同小異的,對(duì)變量,函數(shù),條件語(yǔ)句塊,循環(huán)語(yǔ)句塊等等,本文簡(jiǎn)要介紹一下,感興趣的朋友可以了解下
    2013-01-01

最新評(píng)論

钦州市| 方城县| 甘德县| 大港区| 泾阳县| 昆山市| 合川市| 凉山| 霞浦县| 大厂| 建德市| 孟津县| 渝北区| 武清区| 祁门县| 进贤县| 罗江县| 武定县| 河北区| 宜兴市| 嵊泗县| 洞头县| 新干县| 五莲县| 聊城市| 建瓯市| 古田县| 鹤岗市| 都安| 抚顺市| 彩票| 临猗县| 云龙县| 邹城市| 丹东市| 旬邑县| 赤壁市| 东辽县| 吉隆县| 汕头市| 如东县|