「这是我参与2022首次更文挑战的第17天,活动详情查看:2022首次更文挑战」。
一、对于 原型 与 原型链 的理解
在js中万物皆对象、万物有原型,所以原型也是一个对象,通过原型可以实现对象属性的继承
js的函数对象中都有 prototype 这个内部属性,这个属性就是这个函数对象的原型
prototype 是不能被直接访问的,所以浏览器为我们提供了一个访问器
原型的主要作用就是为了实现继承与扩展对象
当访问一个对象的某个属性时,会先在这个对象本身的属性上查找,如果没有找到就会在这个对象的原型上查找 如果还是没有,就会去原型的原型上查找,这样一层层的往上找就会形成链式结构,称为 原型链
创建一个对象时,并不会立即生成属于这个对象的原型,但是当我们修改原型的时候,这个对象也会随着修改来继承改变
对于原型的理解可以举个例子
let human = {
thinking:function() {
console.log('会思考')
}
}
let student = {
name:'学生',
learn:function(){
console.log('会学习')
}
}
// 学生是人类
student.__proto__ = human
let liming = {
name : '李明'
}
// 李明是一个学生
liming.__proto__ = student
// 所以说李明既会学习又会思考
liming.thinking() //会思考
liming.learn() //会学习
二、常见的JS的继承方法
ES5 继承
- 原型链继承
- 借用构造函数继承(伪造对象或经典继承)
- 组继承(伪经典继承)
- 型式继承
- 寄生式继承
- 寄生组合式继承
ES6 继承
-
使用class构造一个父类
class Parent { constructor(name,age){ this.name = name this.age = age } sayName(){ console.log(this.name) } } -
使用class构造一个子类,并使用 extends 实现继承 , super 指向父类的原型对象
class Child extends Parent { constructor(name,age,gender){ super(name,age) this.gender = gender } sayGender(){ console.log(this.gender) } } -
实例化对象
const ming =new Child('ming',18,'男') ming.sayGender() ming.sayName() console.log(ming.name) console.log(ming.age)
三、new的原理
四、call
(还没写完)
加油加油!!
努力学习!!