面试精简语

2019-07-01  本文已影响0人  輪徊傷

原型链

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

四、预编译

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到页面展示的过程

上一篇下一篇

猜你喜欢

热点阅读