Javascript OOP 筆記

創(chuàng)建對象


工廠模式

    var o = new Object();
    o.name = name;
    o.age = age;
    o.job = job;
    o.sayName = function(){
        alert(this.name)
    };
    return 0;
}

var person1 = createPerson("xiaohong",13,"ji");
var person2 = createPerson("xiaoming",16,"ya");

//*工廠模式的缺點是 沒有解決對象識別問題(即怎么知道一個對象的類型)


構造函數(shù)模式

function Person(name,age,job){
    this.name = name;
    this.age = age;
    this.job = job;
    this.sayName = New Function("alert(this.name)")
}

var person1 = new Person("xiaohong",13,"ji");
var person2 = new Person("xiaoming",16,"ya");

//用new操作符創(chuàng)建新實例.步驟有以下4點
//
1)創(chuàng)建一個新對象
//2)將構造函數(shù)賦的作用域賦值給新對象(this指向新對象)
//
3)執(zhí)行構造函數(shù)代碼(為新對象添加屬性)
//4)返回新對象
//
構造函數(shù)與其他函數(shù)的區(qū)別是,調(diào)用它們的方法不同而已(用new調(diào)用的函數(shù)就會變成構造函數(shù))


原型模式

function Person(){ }

Person.prototype.name = "xiaohong"
Person.prototype.age = 13
Person.prototype.job = "ji"
Person.prototype.sayName = function() {
    alert(this.name)
}

var person1 = new Person()
person1.sayName() //"xiaohong"
var person2 = new Person()
person2.sayName() //"xiaohong"

//*實例在沒有重寫的情況下只有其實例化對象的原型一個屬性.如下

alert(person1.name) //"xiaohong" --來自原型
person1.hasOwnProperty("name") //false
person1.name = "xiaoming"
alert(person1.name) //"xiaoming" --來自實例
person1.hasOwnProperty("name") //true

//調(diào)用構造函數(shù)時會為實例添加一個指向最初原型的指針.當原型修
//改為另一個對象時就等于切斷了構造函數(shù)與最初原型型之間的練習
//
如下:

function Person(){ }
var friend = new Person()
Person.prototype = {
    constructor:Person,
    name : "xiaohong",
    age : 13,
    job : "ji",
    sayName: function(){
        alert(this.name)
    }
}
friend.sayName() //error

//原型的缺點是共享數(shù)據(jù).當向?qū)嵗玫脑蛯傩詳?shù)組中添加元素
//會直接添加到原型從而改變所有的實例的值
//
如下

function Person(){  }
Person.prototype = {
    name : "xiaohong",
    age : 13
    friends : ["xiaoming","xiaogang"],
    sayName : function () {...}
}
var person1 = new Person();
var person2 = new Person();

person1.friends.push("daming")

alert(person1.friends) //"xiaoming,xiaogang,daming"
alert(person2.friends) //"xiaoming,xiaogang,daming"

組合使用構造函數(shù)模式和原型

//*構造函數(shù)定義實例屬性;原型定義共享方法和共享屬性

function Person(){
    this.name = name
    this.age = age
    this.job = job
    this.friends = ["daming","xiaogong"]
}

Person.prototype = {
    construtor: Person,
    sayName: function(){
        alert(this.name)
    }
}

var person1 = new Person("xiaohong",13,"ji");
var person2 = new Person("xiaoming",16,"ya");

person1.friends.push("laowang")
alert(person1.friends) // "daming,xiaogang,laowang"
alert(person2.friends) // "daming,xiaogang"
alert(person1.friends === person2.friends) // false
alert(person1.sayName === person2.sayName) // true

相關文檔

MDN ,Javascript高級程序設計

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 第3章 基本概念 3.1 語法 3.2 關鍵字和保留字 3.3 變量 3.4 數(shù)據(jù)類型 5種簡單數(shù)據(jù)類型:Unde...
    RickCole閱讀 5,513評論 0 21
  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學習記錄文檔,今天18年5月份再次想寫文章,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 3,143評論 2 9
  • ??面向?qū)ο螅∣bject-Oriented,OO)的語言有一個標志,那就是它們都有類的概念,而通過類可以創(chuàng)建任意...
    霜天曉閱讀 2,256評論 0 6
  • 函數(shù)和對象 1、函數(shù) 1.1 函數(shù)概述 函數(shù)對于任何一門語言來說都是核心的概念。通過函數(shù)可以封裝任意多條語句,而且...
    道無虛閱讀 4,945評論 0 5
  • 仿佛 我仿佛置身于虛無中象牙塔里堆著我無盡的夢一壘一壘夢里青田麥子香牛羊嗅到野地的芬芳我的馬兒狂野地馳騁嘶昂聲暢快...
    南溪向南北歌流海閱讀 132評論 2 1

友情鏈接更多精彩內(nèi)容