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函数的局部变量,跟新对象没关系

  • 相关阅读:
    门禁控制系统的状态机-《实时控制软件设计》第二周作业
    [leetcode] Single Number
    [leetcode] Candy
    [leetcode] Gas Station
    [leetcode] Clone Graph
    [leetcode] Palindrome Partitioning II
    [leetcode] Palindrome Partitioning
    [leetcode] Surrounded Regions
    [leetcode] Sum Root to Leaf Numbers
    [leetcode] Longest Consecutive Sequence
  • 原文地址:https://www.cnblogs.com/yhf286/p/4819913.html
Copyright © 2011-2022 走看看