手打基础丸 🧆 => 精选基础知识,经过多道工序精心制作而成,口感鲜嫩多汁。一口咬下,香气四溢,加上传统前端风味,令人回味无穷...... 助力食用者厚积薄发,夯实根基进阶上层。
JS中的对象如何继承?
// extends关键字继承,自ES6引入,方便很多,类似java的体系
class Child extends Parent(){
constructor(name){
super(name)
}
}
//原型链继承:通过将一个对象的原型指向另一个对象继承,可以继承父类的属性和方法
function Parent(name){
this.name = name
}
Parent.prototype.getName = function() {
return this.name
}
function Child(){}
Child.prototype = new Parent('Child')
const child = new Child()
console.log(child.getName())// 输出 'Child'
// 构造函数继承,通过调用父构造函数来实现,可以避免引用属性共享的问题
function Child(name){
// call改变this指向为这里的name
Parent.call(this, name)
}
const child = new Child('Child')
console.log(child.name)// 输出 'Child'
// 还可以使用构造函数和原型链组合继承,涵盖两种方法的优点,既能继承父类属性和方法,又能避免引用属性共享。
Child.prototype = new Parent()
Child.prototype.constructor = Child
const child = new Child('Child')
console.log(child.getName())//输出 'Child'
//寄生组合继承,是对组合继承的优化,避免了不必要的父类构造函数调用
Child.prototype = Object.create(Parent.prototype)
Child.prototype.constructor = Child
const child = new Child('Child')
console.log(child.getName())//输出 'Child'
JS中Proxy和Reflect?
Proxy:可以创建代理对象的构造函数。代理对象可以拦截并自定义对目标对象的基本操作,常用于访问控制、数据验证、自动化任务
Reflect:提供了一些对对象操作相关的方法的一个内置对象,与Proxy 的捕获器方法对应
两者搭配使用可以拦截对象操作并且轻松调用默认行为。
JS中new的原理?
new用于调用类构造方法创建一个对象实例,且只能调用构造函数不能调用普通函数
具体过程如下:
创建一个新空间,即在堆内存中创建一个空间 ==》
将空对象的原型指向构造函数的prototype属性==》
将构造函数的this指向这个新对象并执行构造函数==》
构造函数返回对象(若返回值非对象则创建一个对象返回)