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

相关文章
相关标签/搜索