原型和原型鏈的理解和使用


1、對象字面量是一個 名/值 對列表,每個 名/值 對之間用逗號分隔,最后用一個大括號括起來。名/值對 表示對象的一個屬性或方法,名和值之間用冒號分隔。

/**
* @author zhanghua
*/
var literal = {
    add: function(){
        alert("add");
    },
    del: function(){
        alert("delete");
    },
    update: function(){
        alert("update");
    },
    name: "zhangsan",
    callLiteral: function(){
        // 對於當前字面量對象的調用,要加this關鍵字
        this.add();
    }
};

2、首先為一個對象定義構造函數,為對象的屬性賦值。這里面的屬性是自定義屬性。

var BaseCalculator = function() {
this.decimalDigits = 2;
};

3、原型使用的兩種方式:

(1) 通過對象字面量給Calculator的prototype屬性賦值:

BaseCalculator.prototype = {
add: function(x, y) {
return x + y;
},
subtract: function(x, y) {
return x - y;
}
};
(2)通過立即執行函數為prototype賦值,可以達到方法的私有化:
BaseCalculator.prototype = function () {
add = function (x, y) {
return x + y;
},

subtract = function (x, y) {
return x - y;
}
return {
add: add,
subtract: subtract
}
} ();
(3) 
Calculator.prototype = BaseCalculator.prototype;  Calculator的實例只能訪問BaseCalculator原型中的方法和屬性,不能訪問構造函數中的屬性。
Calculator.prototype = new BaseCalculator();      Calculator的實例既能訪問BaseCalculator原型中的方法和屬性,也能訪問構造函數中的屬性。
 

(4)重寫原型:在使用第三方JS類庫的時候,往往有時候他們定義的原型方法是不能滿足我們的需要,但是又離不開這個類庫,所以這時候我們就需要重寫他們的原型中的一個或者多個屬性或function

Calculator.prototype.subtract = function(x, y, z){return x + z –y;};

(5) 原型鏈: 是由子對象對父對象進行多次原型繼承形成的鏈式關系。當調用子對象的某個屬性或方法時,javascript會向上遍歷原型鏈,直到找到為止,沒有返回undefined。但是注意: 屬性在查找的時候是先查找自身的屬性,如果沒有再查找原型,再沒有,再往上走,一直插到Object的原型上。

(6) hasOwnProperty函數: 是Object.prototype的一個方法,它能夠查找一個對象是否包含自定義屬性而不是原型鏈的屬性。可以對 for in 進行過濾。 但是注意: 最好使用{}.hasOwnProperty方式先除去

某個對象中可能包含的對hasOwnProperty屬性非法占用。

 

 

 

 

以上參考大牛博客:  http://www.cnblogs.com/TomXu/archive/2012/01/05/2305453.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM