js中对象的constructor属性及其作用

js中对象的constructor属性及其作用_第1张图片
引用javascript 对象中的 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增加新方法怎么办?

// a.constructor.prototype 在chrome,firefox中可以通过 a.__proto__ 直接访问
a.constructor.prototype.log2 = function () {
  console.log(this.b)
}

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

通过访问constructor就可以了。(个人理解是因为除了火狐和谷歌浏览器不能使用__proto__,故使用constructor来访问)
或者我想知道a的构造函数有几个参数?

a.constructor.length

通俗的讲,就是为了将实例的构造器的原型对象暴露出来, 比如你写了一个插件,别人得到的都是你实例化后的对象, 如果别人想扩展下对象,就可以用 instance.constructor.prototype 去修改或扩展原型对象。

本人在@celi_echo的帮助下的理解:
constructor可以当做prototype的属性,
a.constructor = a.proto.constructor = A.prototype.constructor =A

你可能感兴趣的:(js中对象的constructor属性及其作用)