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

JS 創(chuàng)建對象的模式實例小結(jié)

 更新時間:2020年04月28日 10:50:56   作者:xiaoping  
這篇文章主要介紹了JS 創(chuàng)建對象的模式,結(jié)合實例形式總結(jié)分析了JS 創(chuàng)建對象的各種常用模式,包括工廠模式、構(gòu)造函數(shù)模式、原型模式、組合構(gòu)造和原型模式、動態(tài)原型模式、寄生構(gòu)造函數(shù)模式、穩(wěn)妥構(gòu)造模式等,需要的朋友可以參考下

本文實例總結(jié)了JS 創(chuàng)建對象的模式。分享給大家供大家參考,具體如下:

1.工廠模式

抽象了創(chuàng)建具體對象的過程,創(chuàng)建了一種函數(shù),封裝特定的接口創(chuàng)建對象的細(xì)節(jié)。

  • 新建一個對象
  • 定義屬性和方法
  • return剛新建的對象
function createPerson(name, age, job) {
 var obj = new Object();
 obj.name = name;
 obj.age = age;
 obj.job = job;
 obj.sayHi = function() {
 congsole.log(this.name);
 };
 return obj;
}

var person1 = createPerson("name1", "age1", "job1");
var person2 = createPerson("name2", "age2", "job2");

存在問題:

沒有解決對象識別的問題(怎么識別對象的類型)

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

  • 不顯式創(chuàng)建對象
  • 直接將屬性和方法定義在this
  • 沒有return
  • 通過 new操作符調(diào)用
function Person(name, age, job) {
 this.name = name;
 this.age = age;
 this.job = job;
 this.sayHi = function() {
 console.log(this.name);
 };
}

var person1 = new Person("name1", "age1", "job1");
var person2 = new Person("name2", "age2", "job2");

存在問題:

  • 每個方法都要在實例上創(chuàng)建一次

3.原型模式

創(chuàng)建的每一個函數(shù)都有prototype原型屬性,這個屬性是一個指針,指向一個對象,這個對象的用途是包含可以由特定類型的所有實例共享的屬性和方法。

所有原生引用類型都在其構(gòu)造函數(shù)的原型上定義了方法

function Person{

}

Person.prototype.name="name"
Person.prototype.age="age"
Person.prototype.job="job"
Person.prototype.sayHi=function(){
 console.log(this.name)
}

var person1=new Person()
var person2=new Person()

存在問題:

  • 所有屬性是被很多實例共享的

4.組合構(gòu)造和原型模式

構(gòu)造函數(shù)用來定義實例屬性,原型模式用來定義方法和共享的屬性

function Person(name, age, job) {
 this.name = name;
 this.age = age;
 this.job = job;
}
Person.prototype={
 constructor:Person;
 sayHi:function(){
 console.log(this.name)
 }
}

var person1 = new Person("name1", "age1", "job1");

5.動態(tài)原型模式

這里對原型的修改,能夠?qū)λ袑嵗?,只在初次調(diào)用構(gòu)造函數(shù)會執(zhí)行

function Person(name,age,job){
 this.name=name;
 this.age=age;
 this.job=job;
 if(typeof this.sayHi !="function" ){
 Person.prototype.sayHi=functong(){
  console.log(this.name)
 }
 }
}

var person1 = new Person("name1", "age1", "job1");

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

工廠模式+構(gòu)造函數(shù)

  • 返回的對象與構(gòu)造函數(shù)、構(gòu)造函數(shù)的原型屬性之間沒有關(guān)系
  • 不能依賴instanceof來去定對象原型
  • 不建議使用
function Person(name, age, job) {
 var obj = new Object();
 obj.name = name;
 obj.age = age;
 obj.job = job;
 obj.sayHi = function() {
 congsole.log(this.name);
 };
 return obj;
}

var person1 = new Person("name1", "age1", "job1");

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

  • 沒有公共屬性
  • 不使用this
  • 不使用new
function Person(name, age, job) {
 var obj = new Object();
 // 定義室友變量和函數(shù)
 obj.sayHi = function() {
 congsole.log(name);
 };
 return obj;
}

var person1 = Person("name1", "age1", "job1");
// name1

摘抄自《JavaScript 高級程序設(shè)計》第六章

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運算用法總結(jié)

希望本文所述對大家JavaScript程序設(shè)計有所幫助。

相關(guān)文章

最新評論

萨嘎县| 龙川县| 平邑县| 苏州市| 绥江县| 昭通市| 常山县| 右玉县| 海口市| 遵义县| 靖远县| 土默特右旗| 马公市| 普陀区| 偃师市| 武隆县| 陆丰市| 晋宁县| 泾川县| 神池县| 枣强县| 景谷| 屏东市| 司法| 乌海市| 新宾| 龙胜| 廊坊市| 盐津县| 高州市| 永城市| 依兰县| 大港区| 惠来县| 保定市| 清远市| 阿尔山市| 庄浪县| 郓城县| 乐都县| 武定县|