zoukankan      html  css  js  c++  java
  • js中new构造函数的研究

    《javascript高级编程》里对new操作符的解释:

      new操作符会让构造函数产生如下变化:

      1.       创建一个新对象;

      2.       将构造函数的作用域赋给新对象(因此this就指向了这个新对象);

      3.       执行构造函数中的代码(为这个新对象添加属性);

      4.       返回新对象

    /*
    Constr:构造函数
    args:初始化参数
    */
    function newOperator(Constr, args) {
        var thisValue = Object.create(Constr.prototype); // 以构造函数的原型对象新建一个新对象
        var result = Constr.apply(thisValue, args);//把构造函数的this指向新对象,并为新函数添加新属性
        if (typeof result === 'object' && result !== null) {
            return result; // 返回新对象
        }
        return thisValue;
    }

    看看这段代码的结果

    var a=5;
    function test(){
        a=0;
        alert(a);
        alert(this.a);
        var a;
        alert(a);
    }
    test();
    new test();
    0
    5
    0
    0
    undefined
    0

    再看看这段代码的结果

    var a=5;
    function test(){
        this.a=0;
        alert(a);
        alert(this.a);
        var a;
        alert(a);
    }
    test();
    new test();
    undefined
    0
    undefined
    
    undefined
    
    0
    undefined

    这段代码可以解释为定义var a;那么a就是函数的局部变量,只能在他的活动对象里面找,当执行test()时,this.a相当于window.a;当执行new test()时,this.a这相当于新对象的属性,而a还是test函数的局部变量,跟新对象没关系

  • 相关阅读:
    Unity3d vector3.forward和transform.forward的区别!
    UGUI实现摇杆
    UGUI实现拼图游戏
    Unity3d打包发布Android程序
    兼容PC和手机触摸代码
    unity3d中Transform组件变量详解
    运算符重载
    扩展方法
    string.Format格式化输出
    网络编程之Socket的TCP协议实现客户端与客户端之间的通信
  • 原文地址:https://www.cnblogs.com/yhf286/p/4819913.html
Copyright © 2011-2022 走看看