需求
让子对象可用父方法
让子构造指向父构造
存在的问题
如果给子构造的原型添加独有方法
会影响到父构造的原型
与实际需求的逻辑不符合
问题复现代码:
function Animal() {
this.name = "动物"
}
Animal.prototype.show = function () {
console.log("我的名字叫" + this.name)
}
function Dog() {
// 在子构造中用call调一下父造方法,把子对象本身传过去
Animal.call(this)
}
// 让狗原型指向动物原型(行不通)
Dog.prototype = Animal.prototype
// 给狗添加看门的方法
// 如果给子构造的原型添加了方法
// 那么会影响到父类
// 子类不好添加自己的独有方法
Dog.prototype.gard = function () {
console.log("狗在看门")
}
var wc = new Dog()
wc.show()
wc.gard()
var ani = new Animal()
ani.gard()
解决办法
function Animal() {
this.name = "动物"
}
Animal.prototype.show = function () {
console.log("我的名字叫" + this.name)
}
// 实例化一个动物对象
var dog_proto = new Animal()
function Dog() {
// 在子构造中用call调一下父造方法,把子对象本身传过去
Animal.call(this)
}
// 让狗原型指向动物原型(行不通)
Dog.prototype = dog_proto
// 给狗添加看门的方法
// 如果给子构造的原型添加了方法
// 那么会影响到父类
// 子类不好添加自己的独有方法
Dog.prototype.gard = function () {
console.log("狗在看门")
}
var wc = new Dog()
// 输出狗的特有方法
wc.gard()
// 测一测动物是否受影响
var ani = new Animal()
ani.gard()