美文网首页Js方法延伸
关于 javascript 的 constructor 理解

关于 javascript 的 constructor 理解

作者: 崩鲨卡拉卡 | 来源:发表于2019-02-20 10:05 被阅读0次
    对象的 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
    

    相关文章

      网友评论

        本文标题:关于 javascript 的 constructor 理解

        本文链接:https://www.haomeiwen.com/subject/qyvaeqtx.html