JavaScriptconstructor属性详解
对象的constructor属性⽤于返回创建该对象的函数,也就是我们常说的构造函数。
在JavaScript中,每个具有原型的对象都会⾃动获得constructor属性。除了arguments、Enumerator、Error、Global、Math、RegExp、Regular Expression等⼀些特殊对象之外,其他所有的JavaScript内置对象都具备constructor属性。例如:Array、Boolean、Date、Function、Number、Object、String等。
语法
返回值
对象的constructor属性返回创建该对象的函数的引⽤。
⽰例&说明
以下代码中的[native code],表⽰这是JavaScript的底层内部代码实现,⽆法显⽰代码细节。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
27 28 29 30 31// 字符串:String()
var str = "张三";
structor); // function String() { [native code] }
structor === String); // true
// 数组:Array()
var arr = [1, 2, 3];
structor); // function Array() { [native code] }
structor === Array); // true
// 数字:Number()
var num = 5;
structor); // function Number() { [native code] }
structor === Number); // true
// ⾃定义对象:Person()
function Person(){
this.name = "CodePlayer";
}
var p = new Person();
structor); // function Person(){ this.name = "CodePlayer"; } structor === Person); // true
// JSON对象:Object()
var o = { "name": "张三"};
structor); // function Object() { [native code] }
structor === Object); // true
// ⾃定义函数:Function()
function foo(){
alert("CodePlayer");
31 32 33 34 35 36 37 38 39 40 41 alert("CodePlayer");
}
structor); // function Function() { [native code] }
structor === Function); // true
// 函数的原型:bar()
function bar(){
alert("CodePlayer");
}
alert(structor); // function bar(){ alert("CodePlayer"); } alert(structor === bar); // true
为了将实例的构造器的原型对象暴露出来, ⽐如你写了⼀个插件,别⼈得到的都是你实例化后的对象, 如果别⼈想扩展下对象,就可以⽤structor.prototype 去修改或扩展原型对象
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();javascript说明
// 1
b.log();
// 1
通过以上代码我们可以得到两个对象,a,b,他们同为类A的实例。因为A在闭包⾥,所以现在我们是不能直接访问A的,那如果我想给类A 增加新⽅法怎么办?
// a.constructor.prototype 在chrome,firefox中可以通过 a.__proto__ 直接访问
console.log(this.b)
}
a.log2();
// 2
b.log2();
// 2
通过访问constructor就可以了。
或者我想知道a的构造函数有⼏个参数?
或者再复杂点,我想知道a的构造函数的参数名是什么(angular的依赖注⼊就是通过此⽅法实现的据说)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论