js中的constructor

定義和用法

constructor 屬性返回對建立此對象的 Date 函數的引用。javascript

語法

object.constructorjava


 

constructor屬性 不影響任何JavaScript的內部屬性。instanceof檢測對象的原型鏈,一般你是沒法修改的(不過某些引擎經過私有的__proto__屬性暴露出來)。
constructor其實沒有什麼用處,只是JavaScript語言設計的歷史遺留物。因爲constructor屬性是能夠變動的,因此未必真的指向對象的構造函數,只是一個提示。不過,從編程習慣上,咱們應該儘可能讓對象的constructor指向其構造函數,以維持這個慣例。
舉個例子
var a,b;
(function(){
  function A (arg1,arg2) {
    this.a = 1;
    this.b=2; 
  }

  A.prototype.log = function () {
    console.log(this.a);
  }
  a = new A();
  b = new A();
})()
a.log();
// 1
b.log();
// 1

 經過以上代碼咱們能夠獲得兩個對象,a,b,他們同爲類A的實例。由於A在閉包裏,因此如今咱們是不能直接訪問A的,那若是我想給類A增長新方法怎麼辦?chrome

// a.constructor.prototype 在chrome,firefox中能夠經過 a.__proto__ 直接訪問
a.constructor.prototype.log2 = function () {
  console.log(this.b)
}

a.log2();
// 2
b.log2();
// 2

  

經過訪問constructor就能夠了。 或者我想知道a的構造函數有幾個參數?編程

  a.constructor.length
或者再複雜點,我想知道a的構造函數的參數名是什麼(angular的依賴注入就是經過此方法實現的聽說)
a.constructor
 .toString()
 .match(/\(.*\)/)
 .pop().slice(1,-1)
 .split(',');
// ["arg1", "arg2"]

 

原文:https://segmentfault.com/q/1010000000347868 segmentfault

相關文章
相關標籤/搜索