共计 1014 个字符,预计需要花费 3 分钟才能阅读完成。
构造函数和原型
ES6 之前没有提供 extends 继承,可以通过构造函数 + 原型对象模拟实现继承,被称为组合继承。
call()
调用这个函数并且修改函数运行时的 this 指向。
function fn() {console.log(this)
}
const obj = {name: " 佩奇 ",}
fn() //Window
fn.call(obj) //Object
继承父类属性:
function Father(name, age) {
this.name = name
this.age = age
}
function Son(name, age, score) {
// 把父构造函数的 this 改为子构造函数的 this
Father.call(this, name, age, score)
this.score = score
}
const son = new Son(" 佩奇 ", 10, 99)
console.log(son) //Son {name: '佩奇', age: 10, score: 99}
继承父类方法:
function Father(name, age) {
this.name = name
this.age = age
}
Father.prototype.money = function () {console.log(10000)
}
function Son(name, age, score) {
// 把父构造函数的 this 改为子构造函数的 this
Father.call(this, name, age, score)
this.score = score
}
Son.prototype = new Father()
Son.prototype.constructor = Son // 利用 constructor 指回用来的构造函数
Son.prototype.exam = function () {console.log(" 儿子要考试!")
}
const son = new Son(" 佩奇 ", 10, 99)
console.log(Son.prototype.constructor) //Son
类
类中的所有代码都会在严格模式下执行。严格模式下其中一个特点就是,函数的 this 不在是 window,而是 undefined。
注意:
- 在类中方法的 this 不是固定的:以方法形式调用时,this 就是当前的实例;以函数形式调用,this 是 undefined
- 在有些场景下,希望方法中的 this 是固定的,不会因调用方式不同而改变。可以使用箭头函数来定义类中的方法,则方法中的 this 恒为当前实例,不会改变。
正文完