JavaScript原型學習筆記

理解JavaScript原型javascript

什麼是原型?java

原型是一個對象,其餘對象能夠經過它實現屬性繼承。git

任何一個對象均可以成爲原型麼?函數

this

哪些對象有原型.net

全部的對象在默認的狀況下都有一個原型,由於原型自己也是對象,因此每一個原型自身又有一個原型(只有一種例外,默認的對象原型在原型鏈的頂端。)prototype

當咱們已經建立了一個實例對象 ,咱們想要這個實例對象繼承一個已經存在的對象的功能好比說Array,就可使用原型code

 

函數A的原型屬性(prototype property )是一個對象,當這個函數被用做構造函數來建立實例時,該函數的原型屬性將被做爲原型賦值給全部對象實例(注:即全部實例的原型引用的是函數的原型屬性)htm

有一個原型屬性,這和函數的原型是不同的
b.prototype //[object Object]   函數b的原型屬性對象

b.__proto__ 或者b.construtor.prototype 函數的原型

//建立一個函數b
var b = function(){ var one; }
//使用b建立一個對象實例c
var c = new b();

1 b的構造函數
b.constructor;  // function Function() { [native code]}
2 實例c的構造函數
c.constructor; // 即 b function(){ var one; }

b.constructor==Function.constructor;
c.constructor==b;

3 b的原型
b.constructor.prototype // function (){}
b.__proto__  //function (){}

4 函數b的原型屬性
b.prototype //[object Object]   

5 c的對象的原型
c.constructor.prototype //[object Object] 
c.__proto__ //[object Object] 

//爲函數b的原型屬性添加一個屬性max
b.prototype.max = 3
//實例c也有了一個屬性max
c.max  //3
上面的例子中,對象實例c的原型和函數的b的原型屬性是同樣的,若是改變b的原型屬性,則對象實例c
的原型也會改變

  

2  js原型鏈原理看圖說明 太簡潔了,最後一個圖看不懂呀

當你去定義一個prototype的時候,至關於把該實例的__proto__指向一個結構體,那麼這個被指向結構體就稱爲該實例的原型。 

 

JavaScript探祕:強大的原型和原型鏈

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

BaseCalculator.prototype = {
    add: function(x, y) { 
        return x + y;
    },
    subtract: function(x, y) {
      return x - y;
    } 
};

建立完上述代碼之後,咱們來開始:

var Calculator = function () {

    //爲每一個實例都聲明一個稅收數字

    this.tax = 5;
};

Calculator.prototype = new BaseCalculator();        

  咱們能夠看到Calculator的原型是指向到BaseCalculator的一個實例上,目的是讓Calculator集成它的add(x,y)和subtract(x,y)這2個function,還有一點要說的是,因爲它的原型是BaseCalculator的一個實例,因此無論你建立多少個Calculator對象實例,他們的原型指向的都是同一個實例。

屬性在查找的時候是先查找自身的屬性,若是沒有再查找原型,再沒有,再往上走,一直插到Object的原型上

hasOwnProperty是Object.prototype的一個方法,它但是個好東西,他能判斷一個對象是否包含自定義屬性而不是原型鏈上的屬性,由於hasOwnProperty 是 JavaScript 中惟一一個處理屬性可是不查找原型鏈的函數。

相關文章
相關標籤/搜索