最后
总的来说,面试官要是考察思路就会从你实际做过的项目入手,考察你实际编码能力,就会让你在电脑敲代码,看你用什么编辑器、插件、编码习惯等。所以我们在回答面试官问题时,有一个清晰的逻辑思路,清楚知道自己在和面试官说项目说技术时的话就好了
var son2 = new Son(16)
son1.name = 'Sname';
son1.likes.push('eat');
son2.name //Fname
son2.likes //["read","travel", "eat"]
son1.name //Sname
son1.likes //["read","travel", "eat"]
⑵创建子类实例时,无法向父类构造函数传参,使不同的子类实例拥有不同的父类属性值, 例如让每个子类实例拥有各自的name值和likes值。虽然在创建父类的实例时可以传一次参, 但得到的是共享的属性值。
2、借用构造函数继承
使用call或apply 在子类构造函数中调用父类构造函数。
//解决引用类型共享问题,每个子类实例拥有自己的属性
function Father() {
this.arr = [1,2,3]
}
function Son() {
Father.call(this)
}
var son1 = new Son()
var son2 = new Son()
son2.arr.push(4)
console.log(son2.arr) //[1,2,3,4]
console.log(son1.arr) //[1,2,3]
//解决传参问题:每个子类实例继承了父类属性且拥有各自的值
function Father(name) {
this.name = name
}
function Son(name) {
Father.call(this, name)
}
var son1 = new Son("aa")
console.log(son1.name) //aa
var son2 = new Son("bb")
console.log(son2.name) //bb
缺点:
如果方法都在构造函数中定义,没有了 函数复用性。每个实例都创建了一份函数副 本,占资源。
3、组合继承(常用)
原型链+借用构造函数。共享的方法和属性通过原型链继承, 实例各自的属性通过借用构造函数继承。
function Father(name) {
this.name = name
this.arr = [1,2,3]
}
Father.prototype.getName = function() {
console.log(this.name)
}
function Son(name, age) {
Father.call(this, name)
this.age = age
}
Son.prototype = new Father()
Son.prototype.constructor = Son
Son.prototype.getAge = function() {
console.log(this.age)
}
var son1 = new Son("xiao",20)
son1.arr.push(4)
console.log(son1.arr) //[1,2,3,4]
son1.getName() //xiao
son1.getAge() //20
var son2 = new Son("lulu", 16)
console.log(son2.arr) //[1,2,3]
son2.getName() //lulu
son2.getAge() //16
结尾
学习html5、css、javascript这些基础知识,学习的渠道很多,就不多说了,例如,一些其他的优秀博客。但是本人觉得看书也很必要,可以节省很多时间,常见的javascript的书,例如:javascript的高级程序设计,是每位前端工程师必不可少的一本书,边看边用,了解js的一些基本知识,基本上很全面了,如果有时间可以读一些,js性能相关的书籍,以及设计者模式,在实践中都会用的到。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】