欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS常見創(chuàng)建類的方法小結(jié)【工廠方式,構(gòu)造器方式,原型方式,聯(lián)合方式等】

 更新時間:2017年04月01日 14:38:34   作者:我的老婆是?;? 
這篇文章主要介紹了JS常見創(chuàng)建類的方法,結(jié)合實例形式總結(jié)分析了工廠方式,構(gòu)造器方式,原型方式,聯(lián)合方式等常見的javascript創(chuàng)建類的常用技巧與相關(guān)注意事項,需要的朋友可以參考下

本文實例講述了JS常見創(chuàng)建類的方法。分享給大家供大家參考,具體如下:

Javascript是一種基于對象的語言,你遇到的所有東西幾乎都是對象。但是,它又不是一種真正的面向?qū)ο缶幊蹋∣OP)語言,因為它的語法中沒有Class。(不過,ES6引入了Class這個概念,作為對象的模板。通過class關(guān)鍵字,可以定義類。ES6入門:http://es6.ruanyifeng.com/)。

但是在項目開發(fā)中,經(jīng)常用到JS面向?qū)ο箝_發(fā),這就需要我們?nèi)ビ肑S創(chuàng)建類,從而去實例化一些對象。接下來我們介紹一下在JS中創(chuàng)建類的幾種方式:

1.工廠方式:

//通過工廠方式創(chuàng)建對象,先定義一個工廠方法
function createObj(){
  var obj = new Object();
  obj.name="xxx";
  obj.say=function(){
    alert("我是xxx");
  }
  return obj;
}
//調(diào)用工廠方法創(chuàng)建對象:
var obj1 = createObj();
//也可以用這種形式
function createObj(){
  var obj = {}; //這樣生成對象
  obj.name="xxx";
  obj.say=function(){
    alert("我是xxx");
  }
  return obj;
}
var obj1 = createObj();

這種方式的問題是每一次通過工廠方法去創(chuàng)建一個對象,這個對象的屬性name和方法say都必須重新創(chuàng)建一次,浪費內(nèi)存。

2.構(gòu)造器方式:

//創(chuàng)建一個構(gòu)造器,構(gòu)造函數(shù)首字母大寫
function Obj(){
  this.name="xxx";
  this.say=function(){
    alert("我是xxx");
  };
}
//利用構(gòu)造器,通過new關(guān)鍵字生成對象
var obj1=new Obj();

這是最基本的方式,但是也存在和工廠方式一樣的毛病。

3.原型方式:

//用空函數(shù)創(chuàng)建一個類
function Obj(){
}
//在類的原型鏈上添加屬性和方法
Obj.prototype.name="xxx";
Obj.prototype.say=function(){
  alert("我是xxx");
}
//生成對象
var obj1=new Obj();

這個方式的缺點是,當有引用屬性時,改變一個對象的這個屬性也會改變其他對象的這個屬性。因為一個引用屬性,都是指向的同一個地方。

4.原型/構(gòu)造聯(lián)合方式

//用構(gòu)造函數(shù)定義對象的非函數(shù)屬性
function Obj(name){
  this.name=name;
  this.arr=new Array('a','b');
}
//用原型方式定義對象的方法
Obj.prototype.say=function(){
  alert("我是xxx");
}
//生成對象
var obj1 = new Obj('xxx');

這種是目前用的最多的創(chuàng)建類和對象的方式,將方法和屬性用不同的方式封裝。

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

//動態(tài)原型方式和原型/構(gòu)造混合方式的原理相似,唯一的區(qū)別就是賦予對象方法的位置
function Person(name, sex) {
  this.name = name;
  this.sex = sex;
  if (typeof this.say != "function") {
    Person.prototype.say = function () {
      alert(this.name);
    }
  }
}
var man =new Person ("凱撒", "男");
man.say();//凱撒

動態(tài)原型模式是將所有的信息都封裝到構(gòu)造函數(shù)中,構(gòu)造函數(shù)中,只用say不存在的情況下,才會將它添加到原型中。這段代碼只有在初次調(diào)用時才會執(zhí)行。

實例化obj對象有三步:

1. 創(chuàng)建obj對象:

obj=new Object();

2. 將obj的內(nèi)部__proto__指向構(gòu)造他的函數(shù)Obj的prototype,同時,obj.constructor===Obj.prototype.constructor,從而使得obj.constructor.prototype指向Obj.prototype(obj.constructor.prototype===A.prototype)。obj.constructor.prototype與的內(nèi)部_proto_是兩碼事,實例化對象時用的是_proto_,obj是沒有prototype屬性的,但是有內(nèi)部的__proto__,通過__proto__來取得原型鏈上的原型屬性和原型方法。

3. 將obj作為this去調(diào)用構(gòu)造函數(shù)Obj,從而設(shè)置成員(即對象屬性和對象方法)并初始化。

當這3步完成,這個obj對象就與構(gòu)造函數(shù)Obj再無聯(lián)系,這個時候即使構(gòu)造函數(shù)Obj再加任何成員,都不再影響已經(jīng)實例化的obj對象了。

更多關(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)文章

  • JS編寫函數(shù)實現(xiàn)對身份證號碼最后一位的驗證功能

    JS編寫函數(shù)實現(xiàn)對身份證號碼最后一位的驗證功能

    二代身份證號碼為18位,怎么編寫函數(shù)實現(xiàn)對身份證號碼最后一位的驗證功能呢?今天小編通過代碼給大家分享下實現(xiàn)方法
    2016-12-12
  • JavaScript獲取字符串實際長度(包含中英文)

    JavaScript獲取字符串實際長度(包含中英文)

    這篇文章介紹了JavaScript獲取字符串實際長度(包含中英文)的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • JS完整獲取IE瀏覽器信息包括類型、版本、語言等等

    JS完整獲取IE瀏覽器信息包括類型、版本、語言等等

    這篇文章主要介紹了JS如何完整獲取IE瀏覽器信息包括類型、版本、語言等等,需要的朋友可以參考下
    2014-05-05
  • webpack4 optimization使用總結(jié)

    webpack4 optimization使用總結(jié)

    這篇文章主要介紹了webpack4 optimization使用總結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2019-11-11
  • JS時間控制實現(xiàn)動態(tài)效果的實例講解

    JS時間控制實現(xiàn)動態(tài)效果的實例講解

    下面小編就為大家?guī)硪黄狫S時間控制實現(xiàn)動態(tài)效果的實例講解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • 基于JSON數(shù)據(jù)格式詳解

    基于JSON數(shù)據(jù)格式詳解

    下面小編就為大家?guī)硪黄贘SON數(shù)據(jù)格式詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 詳解JavaScript 事件流

    詳解JavaScript 事件流

    這篇文章主要介紹了JavaScript 事件流的相關(guān)資料,幫助大家更好的理解和學(xué)習JavaScript,感興趣的朋友可以了解下
    2020-09-09
  • js實現(xiàn)網(wǎng)頁的兩個input標簽內(nèi)的數(shù)值加減(示例代碼)

    js實現(xiàn)網(wǎng)頁的兩個input標簽內(nèi)的數(shù)值加減(示例代碼)

    下面小編就為大家?guī)硪黄猨s實現(xiàn)網(wǎng)頁的兩個input標簽內(nèi)的數(shù)值加減(示例代碼)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • js瀏覽器html5表單驗證

    js瀏覽器html5表單驗證

    這篇文章主要為大家詳細介紹了js瀏覽器html5表單驗證,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 微信小程序自定義底部、頂部、中間、左邊及右邊彈窗

    微信小程序自定義底部、頂部、中間、左邊及右邊彈窗

    這篇文章主要給大家介紹了關(guān)于微信小程序自定義底部、頂部、中間、左邊及右邊彈窗的相關(guān)資料,彈窗是小程序中非常重要的一種互動方式,比如用戶注冊時錯誤提示、優(yōu)惠券領(lǐng)取提示、簽到成功提示等等,需要的朋友可以參考下
    2023-11-11

最新評論