javaScript继承之经典继承函数

// 经典继承
// 创建Animal对象
function Animal(name) {
    this.categorys = ["cat", "rabbit"];
    this.name = name;
}
// 创建Dog对象
function Dog() {
    // 继承 Animal 
    // 经典继承函数的一个优点就是可以在子类构造函数中向父类构造函数传参。
    Animal.call(this,'zhangsan');
    this.age = 12;
}
// 在var d1 = new Dog()时,是d1调用Dog构造函数,所以其内部this的值指向的是d1,所以Animal.call(this)就相当于Animal.call(d1),就相当于d1.Animal()。最后,d1去调用Animal方法时,Animal内部的this指向就指向了d1。那么Animal内部this上的所有属性和方法,都被拷贝到了d1上。所以,每个实例都具有自己的categorys属性副本。他们互不影响。
var d1 = new Dog();
d1.categorys.push("dog");
// console.log(d1.categorys); // [ 'cat', 'rabbit', 'dog' ]
var d2 = new Dog();
// console.log(d2.categorys); // [ 'cat', 'rabbit' ]
console.log(d2.name);
console.log(d2.age);

// 总结:经典继承解决了原型上出现引用值导致的继承问题和子类构造函数的实例不能向父类构造函数传参的问题.但是经典继承也存在自己的问题:1.在父类构造函数上声明多个方法会造成内存的浪费,2.子类的实例不能访问父类原型上的方法和属性.所以经典继承函数也不单独使用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值