关灯
开启左侧

JavaScript constructor 属性

[复制链接]
紫米 发表于 2019-4-23 16:00:39 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
 
对象的constructor属性用于返回创建该对象的函数,也就是我们常说的构造函数。
在JavaScript中,每个具有原型的对象都会自动获得constructor属性。除了arguments、Enumerator、Error、Global、Math、RegExp、Regular Expression等一些特殊对象之外,其他所有的JavaScript内置对象都具备constructor属性。例如:Array、Boolean、Date、Function、Number、Object、String等。
语法
Object.constructor
返回值
对象的constructor属性返回创建该对象的函数的引用。
示例&说明
以下代码中的[native code],表示这是JavaScript的底层内部代码实现,无法显示代码细节。
  1. // 字符串:String()
  2.     var str = "张三";
  3.     alert(str.constructor); // function String() { [native code] }
  4.     alert(str.constructor === String); // true

  5.     // 数组:Array()
  6.     var arr = [1, 2, 3];
  7.     alert(arr.constructor); // function Array() { [native code] }
  8.     alert(arr.constructor === Array); // true

  9.     // 数字:Number()
  10.     var num = 5;
  11.     alert(num.constructor); // function Number() { [native code] }
  12.     alert(num.constructor === Number); // true

  13.     // 自定义对象:Person()
  14.     function Person(){
  15.         this.name = "CodePlayer";
  16.     }
  17.     var p = new Person();
  18.     alert(p.constructor); // function Person(){ this.name = "CodePlayer"; }
  19.     alert(p.constructor === Person); // true

  20.     // JSON对象:Object()
  21.     var o = { "name" : "张三"};
  22.     alert(o.constructor); // function Object() { [native code] }
  23.     alert(o.constructor === Object); // true

  24.     // 自定义函数:Function()
  25.     function foo(){
  26.         alert("CodePlayer");
  27.     }
  28.     alert(foo.constructor); // function Function() { [native code] }
  29.     alert(foo.constructor === Function); // true

  30.     // 函数的原型:bar()
  31.     function bar(){
  32.         alert("CodePlayer");
  33.     }
  34.     alert(bar.prototype.constructor); // function bar(){ alert("CodePlayer"); }
  35.     alert(bar.prototype.constructor === bar); // true
复制代码
为了将实例的构造器的原型对象暴露出来, 比如你写了一个插件,别人得到的都是你实例化后的对象, 如果别人想扩展下对象,就可以用 instance.constructor.prototype 去修改或扩展原型对象

链接:https://www.zhihu.com/question/19951896/answer/67551712

引用 javascript 对象中的 constructor属性的作用?的回答:
  1.     var a,b;
  2.     (function(){
  3.         function A (arg1,arg2) {
  4.             this.a = 1;
  5.             this.b=2;
  6.         }

  7.         A.prototype.log = function () {
  8.             console.log(this.a);
  9.         }
  10.         a = new A();
  11.         b = new A();
  12.     })()
  13.     a.log();
  14.     // 1
  15.     b.log();
  16.     // 1
复制代码
通过以上代码我们可以得到两个对象,a,b,他们同为类A的实例。因为A在闭包里,所以现在我们是不能直接访问A的,那如果我想给类A增加新方法怎么办?
  1.     // a.constructor.prototype 在chrome,firefox中可以通过 a.__proto__ 直接访问
  2.     a.constructor.prototype.log2 = function () {
  3.         console.log(this.b)
  4.     }

  5.     a.log2();
  6.     // 2
  7.     b.log2();
  8.     // 2
复制代码
通过访问constructor就可以了。
或者我想知道a的构造函数有几个参数?
  1. a.constructor.length
复制代码
或者再复杂点,我想知道a的构造函数的参数名是什么(angular的依赖注入就是通过此方法实现的据说)
  1.   a.constructor
  2.         .toString()
  3.         .match(/\(.*\)/)
  4.         .pop().slice(1,-1)
  5.         .split(',');
  6.     // ["arg1", "arg2"]
复制代码



 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

排行榜
关闭

站长推荐上一条 /1 下一条

官方微信

全国服务热线:

400-0708-360

公司地址:国家西部信息安全产业基地(成都市高新区云华路333号)

邮编:610000    Email:2908503813@qq.com

Copyright   ©2015-2016  EOIT论坛Powered by©Discuz!    ( 蜀ICP备11000634号-7 )