美文网首页
js深入之从原型到原型链

js深入之从原型到原型链

作者: 熬得萨菲 | 来源:发表于2020-02-06 19:55 被阅读0次

    一.从原型到原型链

    1.一切对象都是通过new函数实例化出来的

    2. proto指向的是构造出自己的构造函数的原型

    person.__proto__ === Person.prototype
    

    补充:

    1.constructor属性:
    person.constructor === Person // true
    当获取person.constructor时,其实就是person中并没有constructor属性,当不能读取到constructor属性时,会从person的原型,也就是Person.prototype中读取
    
    2.__proto__
    实际上它并不存在于Person.prototype中,它是来源于Object.prototype,与其说是一个属性,不如说是一个getter/setter,当使用obj.__proto__时,可以理解成返回了Object.getPrototypeOf(obj);
    

    二. 作用域和动态作用域

    注意点: 当执行一个函数的时候,就会创建一个执行上下文,并且压入执行上下文栈,当“函数执行完毕”的时候,就会将函数的执行上下文从栈中弹出。

        var scope = "global scope";
    function checkscope(){
        var scope = "local scope";
        function f(){
            return scope;
        }
        return f();
    }
    checkscope();
    var scope = "global scope";
    function checkscope(){
        var scope = "local scope";
        function f(){
            return scope;
        }
        return f;
    }
    checkscope()();
    
    两段代码执行的结果一样,但是两端代码究竟有哪些不同呢?
    代码执行过程模拟:
    1.
    ECstack.push(<checkscope> functionContext);
    ECstack.push(<f> functionContext);
    ECstack.pop()
    ECstack.pop()
    
    2.
    ECstack.push(<checkscope> functionContext);
    ECstack.pop()
    ECstack.push(<f> functionContext);
    ECstack.pop()
    总结:二者的区别就是在于函数是否执行完毕,如果函数执行完毕就会立即将函数的执行上下文从栈中弹出。
    
    --------------------------------------
    
    var scope = "global scope";
    function checkscope(){
        var scope = "local scope";
        function f(){
            return scope;
        }
        return f;
    }
    
    var foo = checkscope();
    foo();
    这里直接给出简要的执行过程:
    
    1.进入全局代码,创建全局执行上下文,全局执行上下文压入执行上下文栈
    2.全局执行上下文初始化
    3.执行 checkscope 函数,创建 checkscope 函数执行上下文,checkscope 执行上下文被压入执行上下文栈
    4.checkscope 执行上下文初始化,创建变量对象、作用域链、this等
    5.checkscope 函数执行完毕,checkscope 执行上下文从执行上下文栈中弹出
    6.执行 f 函数,创建 f 函数执行上下文,f 执行上下文被压入执行上下文栈
    7.f 执行上下文初始化,创建变量对象、作用域链、this等
    8.f 函数执行完毕,f 函数上下文从执行上下文栈中弹出
    
    

    相关文章

      网友评论

          本文标题:js深入之从原型到原型链

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