麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 語言 > JavaScript > 正文

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

2024-05-06 16:24:03
字體:
供稿:網(wǎng)友
這篇文章主要介紹了javascript設(shè)計模式之對象工廠函數(shù)與構(gòu)造函數(shù)詳解,使用對象字面量,或者向空對象中動態(tài)地添加新成員,是最簡單易用的對象創(chuàng)建方法,除了這兩種常用的對象創(chuàng)建方式,JavaScript還提供了其他方法創(chuàng)建對象,需要的朋友可以參考下
 

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

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

概述

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

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

 

復(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)建對象     
 var person1 = createPerson('張三', 29, '軟件工程師');     
 var person2 = createPerson('李四', 40, '醫(yī)生');
 

 

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

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

 

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

//定義對象“構(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)用對象構(gòu)造函數(shù)創(chuàng)建對象     
 var p1 = new Person('張三', 29, '軟件工程師');     

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

 

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

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

 

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

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

 

 

 

對象構(gòu)造函數(shù)長得這個樣:

 

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

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

 

實際上是這樣(示意):

 

復(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)建一個新的對象
2. 讓構(gòu)造函數(shù)的this引用這一新創(chuàng)建的對象
3. 執(zhí)行構(gòu)造函數(shù)中的代碼,這些代碼通常完成向新對象添加屬性的工作
4. 向外界返回新創(chuàng)建的對象引用。

對象構(gòu)造函數(shù)與對象工廠方法的區(qū)別

1. 對象構(gòu)造函數(shù)中沒有顯式的對象創(chuàng)建代碼
2. 新對象應(yīng)具備的屬性與方法是通過this引用添加的.
3. 對象構(gòu)造函數(shù)中沒有return語句

 通常會把對象構(gòu)造函數(shù)的首字母設(shè)置為大寫的,以區(qū)別于普通函數(shù)。
對象的constructor屬性

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

 

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

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

 

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

//true

 

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

 

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

var p = new Person('張三', 29, '軟件工程師');
//使用對象構(gòu)造函數(shù)創(chuàng)建對象,
//每個對象的constructor屬性,引用這個構(gòu)造函數(shù)
console.info(p.constructor === Person);
 //true如何避免“忘記”new?可以使用arguments.callee解決這個問題      
//了解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;     
 }      
//測試      
var obj1 = new MyObject(100);     
 console.info(obj1.prop);//100     
 var obj2 = MyObject(200);        
console.info(obj2.prop); //200

 

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


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 国产一有一级毛片视频 | 素人视频在线观看免费 | 国产中出视频 | 毛片免费视频观看 | 久色视频| 成人免费一区二区三区 | 免费永久在线观看黄网 | 色柚视频网站ww色 | 成av人在线观看 | 在线看91 | 一级看片免费视频 | 免费的性生活视频 | 亚洲国产精品久久久久婷婷老年 | 成人在线视频在线观看 | 综合日韩欧美 | 久久激情免费视频 | 综合网天天色 | 成年人小视频在线观看 | 香蕉视频99 | 一级成人毛片 | 免费欧美精品 | 91成人免费版 | 欧美成人精品不卡视频在线观看 | 制服丝袜日日夜夜 | 国产成人在线一区二区 | 国产伦精品一区二区三区在线 | 免费国产在线观看 | 欧美一级高潮片免费的 | 538任你躁在线精品视频网站 | 他也色在线视频 | 一本色道久久99精品综合蜜臀 | 中文日韩字幕 | 91短视频在线播放 | 鲁久久| 黄色免费影片 | 日本a∨精品中文字幕在线 被啪羞羞视频在线观看 | 一区二区三区日韩在线观看 | 国产一级一区二区三区 | 亚洲va久久久噜噜噜久久男同 | 亚洲午夜视频在线 | 国产精品一品二区三区四区18 |