Js方法延伸

关于 javascript 的 constructor 理解

2019-02-20  本文已影响0人  崩鲨卡拉卡
对象的 constructor 属性 可以返回创建该对象的函数, 也就是 构造函数
语法: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
上一篇 下一篇

猜你喜欢

热点阅读