国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

“類”的設計模式

peixn / 2264人閱讀

摘要:類的設計模式類的設計模式實例化繼承和相對多態。,每個原型都有一個屬性指向關聯的構造函數。為了方便理解,這里我們簡單模擬實現下面介紹,另外兩種寫法行為委托設計模式委托調用簡單模擬實現語法可以簡潔地定義類方法

“類”的設計模式

類的設計模式:實例化、繼承和(相對)多態。

JavaScript通過原型鏈,在兩個對象之間創建一個關聯。這樣,一個對象就可以通過委托訪問另一個對象的屬性和函數,從而達到“繼承”的實現。

下面來看一個例子:

function Foo(name) {
  this.name = name;
}
Foo.prototype.myName = function () {
  return this.name;
};
function Bar(name, label) {
  Foo.call(this, name);
  this.label = label;
}
Bar.prototype = new Foo(); //實現prototype的關聯
Bar.prototype.myLabel = function () {
  return this.label;
};
var a = new Bar("a", "obj a");
a.myName(); // "a"
a.myLabel(); // "obj a"
構造函數和實例原型的關系圖(紅色的就是原型鏈)

原型prototype

每個函數都有一個prototype屬性,函數的prototype屬性指向了一個對象,這個對象正是調用該構造函數而創建的實例的原型。例子中Bar.prototype就是實例a的原型。

proto

這是每一個JavaScript對象(除了 null )都具有的一個屬性,叫__proto__,這個屬性會指向該對象的原型。

a.__proto__ === Bar.prototype //true
Bar.prototype.__proto__ === Foo.prototype //true
constructor

constructor,每個原型都有一個 constructor 屬性指向關聯的構造函數。

Foo === Foo.prototype.constructor
為了方便理解,這里我們簡單模擬實現new
function objectFactory() {
  var obj = new Object(),Constructor = [].shift.call(arguments);
  obj.__proto__ = Constructor.prototype;
  var ret = Constructor.apply(obj, arguments);
  return typeof ret === "object" ? ret : obj;
};

下面介紹,另外兩種寫法:

Object.create(行為委托設計模式)
var Foo = {
  init: function(name){
    this.name = name;
  },
  myName: function(){
    return this.name;
  }
};
var Bar = Object.create(Foo);
Bar.setup = function(name, label){
  // 委托調用
  this.init(name);
  this.label = label;
};
Bar.myLabel = function(){
  return this.label;
};
var a = Object.create( Bar );
a.setup("a", "obj a");
a.myName(); // "a"
a.myLabel(); // "obj a"
簡單模擬實現Object.create
Object.create = function (o) {
  var F = function () {};
  F.prototype = o;
  return new F();
};
class(class 語法可以簡潔地定義類方法)
class Foo {
  constructor(name) {
    this.name = name;
  }
  myName() {
    return this.name;
  }
}
class Bar extends Foo {
  constructor(props, label) {
    super(props);
    this.label = label;
  }
  myLabel() {
    return this.label;
  }
}
var a = new Bar("a", "obj a");
a.myName(); // "a"
a.myLabel(); // "obj a"

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/97646.html

相關文章

  • Learning PHP —— 設計模式 | Chap2:設計模式與UML

    摘要:設計模式設計模式基本原則設計原則按接口而不是按實現來編程按接口而不是按實現編程是指,要將變量設置為一個抽象類或接口數據類型的實例,而不是一個具體實現的實例。例如父類的一個改變會逐級向下傳遞給子類實現,這可能會影響子類使用的某個算法。 設計模式 設計模式基本原則 設計原則 ① : 按接口而不是按實現來編程 按接口而不是按實現編程是指,要將變量設置為一個抽象類或接口數據類型的實例,而不是一...

    senntyou 評論0 收藏0
  • JavaScript工廠模式

    摘要:基于工廠角色和產品角色的多態性設計是工廠方法模式的關鍵。工廠方法模式之所以又被稱為多態工廠模式,是因為所有的具體工廠類都具有同一抽象父類。工廠方法模式總結工廠方法模式是簡單工廠模式的進一步抽象和推廣。 JavaScript工廠模式 首先需要說一下工廠模式。工廠模式根據抽象程度的不同分為三種 簡單工廠模式 工廠方法模式 抽象工廠模式 1.簡單工廠模式 簡單工廠模式:又稱為靜態工廠方法...

    oujie 評論0 收藏0
  • 設計模式 ----- 開篇

    摘要:與類型庫相比,設計模式是一個更為普遍的概念。是在年,由建筑設計大師亞力山大建筑的永恒之道描述模式是一條由三部分組成的通過規則它表示了一個特定環境一類問題和一個解決方案之間的關系。設計模式是在這方面開始探索的一塊里程碑。 設計模式并非類庫 為了方便地編寫java程序,我們會使用類庫,但設計模式不是類庫。 與類型庫相比,設計模式是一個更為普遍的概念。類庫是由程序組合...

    timger 評論0 收藏0
  • Python中面向對象-怎么創建一個

    摘要:文字有點長,對于不想看文字的朋友,可以去這里看視頻,視頻可能更好理解本節課,我們來學習,如何創建一個類,也就是怎么用畫設計方案先來看一下前面課程里出現過的幾張設計方案前面女媧造人的故事里,女媧創造了張設計方案我們接下來根據那個故事的節奏,也 文字有點長,對于不想看文字的朋友,可以去這里看視頻,視頻可能更好理解https://www.piqizhu.com/v/1GK... 本節課,我...

    only_do 評論0 收藏0
  • 淺談25種設計模式(4/25)(此坑未填)

    摘要:適配器模式橋接模式過濾器模式組合模式裝飾器模式外觀模式享元模式代理模式行為型模式這些設計模式特別關注對象之間的通信。對象適配器另外一種適配器模式是對象適配器,它不是使用多繼承或繼承再實現的方式,而是使用直接關聯,或者稱為委托的方式。 設計模式匯總 創建型模式 這些設計模式提供了一種在創建對象的同時隱藏創建邏輯的方式,而不是使用新的運算符直接實例化對象。這使得程序在判斷針對某個給定實例需...

    0xE7A38A 評論0 收藏0
  • PHP高級特性-反射Reflection以及Factory工廠設計模式結合使用[代碼實例]

    摘要:反射提供給面向對象編程可以自省的能力,即反射。在簡單工廠模式中,根據傳遞的參數來返回不同的類的實例簡單工廠模式又稱為靜態工廠方法模式。也就是簡單工廠模式工廠工廠類。PHP高級特性-反射以及工廠設計模式的結合使用 [結合 Laravel-Admin 代碼實例講解]利用反射來實現工廠模式的生產而無需創建特定的工廠類本文地址http://janrs.com/?p=833轉載無需經過作者本人授權轉載...

    番茄西紅柿 評論0 收藏2637

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<