美文网首页
面试精简语

面试精简语

作者: 輪徊傷 | 来源:发表于2019-07-01 11:41 被阅读0次

    原型链

    在JavaScript中万物都是对象,对象和对象之间也有关系,并不是孤立存在的。对象之间的继承关系,在JavaScript中是通过prototype对象指向原型,再通过proto指向Object对象原型为止,这样就形成了一个原型指向的链条,专业术语称之为原型链。

    • 在原型上定义的属性和方法,创建出来的实例也会拥有原型上的属性和方法
    • 实例上有属性就用实例的属性,实例上没有就去找原型上的属性,原型上没有就去找原型的原型(原型链终极)上的属性

    四、预编译

    • JS运行三部曲:
      • 1、语法分析
      • 2、预编译
      • 3、解释执行代码
    • 简单总结:变量声明提升,函数声明整体提升
    • 具体:
      • 1、创建一个AO对象(Activation Object)执行期上下文
      • 2、寻找形参和变量声明作为AO对象属性名,值为undefined
      • 3、将实参与形参统一
      • 4、在函数体中寻找函数声明,值为函数体、

    js5的this指向

    第一种:方法调用 this指向这个方法的对象

    var age = 38;
    var obj = {
        age: 18,
        getAge: function() {
            console.log(this.age);
        }
    };
    obj.getAge(); 
    //这个this指向obj
    --------------------------------------------------
    // 变式:
    var fn = obj.getAge;
    fn();
     //这个this指向window,因为这个把方法赋值给这个变量了
    

    第二种:函数调用,里面的this指向的是window
    第三种:构造函数调用:this指向调用它的对象
    第四种:上下文调用模式,this指向谁?指向的是传入的对象
    相同点
    都“可以用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由thisObj指定的新对象”。
    例如:
    apply:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.apply(A, arguments);即A对象应用B对象的方法。
    call:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.call(A, args1,args2);即A对象调用B对象的方法。
    不同点
    apply:最多只能有两个参数——新this对象和一个数组argArray。(简单地说就是第二个参数传的是数组)
    call:它可以接受多个参数,第一个参数与apply一样,后面则是一串参数列表。(简单地说就是第一个参数后传的都是参数)

    new 关键字的作用

    1、在构造函数里面创建一个对象obj
    2、将函数里面的this指向创建的那个对象obj
    3、执行构造函数方法,属性和方法被添加到this引用的对象中
    4、返回这个obj对象

    5.闭包

    概念:闭包就是有权访另一个函数作用域中变量的函数
    产生:当内部函数保存到外部时,就会产生闭包
    形式:比如一个a函数中return一个函数,在return得这个函数中使用a函数中的变量,
    缺陷:因为变量在被使用所以无法被垃圾回收机制回收

    函数继承

    继承

    ES5的继承

    1、构造函数实现继承,有个缺点,不能继承原型

        function Parent(){
                 this.name = "parent"
            }
        Parent.prototype.aa=function(){}
        function Child(){
             Parent.call(this)
             this.type ="child"
        }
        console.log(new Child())
    

    2、借助原型是实现继承,child修改值得时候,Parent new出来的对象的值也会被修改

        function Parent(){
            this.name = "parent"
            this.arr = [1,2,3]
        }
        function Child(){
            this.type = "child"
        }
        Child.prototype = new Parent()
        var A = new Child()
        var B = new Child()
            
        A.arr.push(4)
        console.log(A,B)
    

    3、组合方式实现继承

    function Parent(){
        this.name = "parent"
        this.arr = [1,2,3]
    }
    function Child(){
        Parent.call(this)
        this.type = "child"
    }
    Child.prototype = Object.create(Parent.prototype)
    //因为把原型
    Child.prototype.construcotr = Child
    var A = new Child()
    var B = new Child()
    
    A.arr.push(4)
    console.log(A,B)
    

    ES6的继承

    class People{
            constructor(name,age){
                 this.name = name
                 this.age = age
            }
        eat(){
        }
    }
    class Student extends People{
        constructor(id,name,age){
            super(name,age)
            this.id = id
        }
    }
    

    从输入URL到页面展示的过程

    相关文章

      网友评论

          本文标题:面试精简语

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