对象的 constructor 属性 可以返回创建该对象的函数, 也就是 构造函数
除了一些特殊对象 其他对象都具备 构造器,
特殊对象:arguments、Enumerator、Error、Global、Math、RegExp、Regular Expression等对象中的 constructor属性 指向的函数本身,一般都有内置对象均具有 constructor 。
如:Array、Boolean、Date、Function、Number、Object、String等。
语法:object.construct
返回值: 对象的 construct 属性 返回创建该对象的 函数的引用
示例说明:
字符串 string
var str="zhangjian";
alert(str.constructor);
alert(str.constructor === String); // true
输出:
function String() {
[native code]
}
true
数组:Array()
var arr = [1, 2, 3];
alert(arr.constructor); // function Array() { [native code] }
alert(arr.constructor === Array); // true
数字:Number()
var num = 5;
alert(num.constructor); // function Number() { [native code] }
alert(num.constructor === Number); // true
自定义对象
function pang(){
this.name="保时捷赛车——庞小杰"
}
var Peter=new pang();
alert(Peter.constructor);
alert(Peter.constructor=== pang);
输出:
function pang() { this.name="保时捷赛车——庞小杰" }
true
JSON对象:Object()
var o = { "name" : "张三"};
alert(o.constructor); // function Object() { [native code] }
alert(o.constructor === Object); // true
自定义函数:Function()
function foo(){
alert("CodePlayer");
}
alert(foo.constructor); // function Function() { [native code] }
alert(foo.constructor === Function); // true
函数的原型:bar()
function bar(){
alert("CodePlayer");
}
alert(bar.prototype.constructor); // function bar(){ alert("CodePlayer"); }
alert(bar.prototype.constructor === bar); // true
通过以上代码我们可以得到两个对象,a,b,他们同为类A的实例。因为A在闭包里,所以现在我们是不能直接访问A的,那如果我想给类A增加新方法怎么办?
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
// 非原型对象上,用 constructor 构造器 添加方法 和属性
a.constructor.prototype.log2=function(){
alert(this.b)
}
a.log2();
通过访问constructor就可以了。
或者我想知道a的构造函数有几个参数?
a.constructor.length