javaScript原型链继承

本文深入探讨JavaScript原型链的概念,通过实例展示了原型链如何影响对象属性的访问和修改。讨论了实例变量的独立性、原型变量的共享性以及查找规则。同时,分析了原型中引用类型值的特殊处理,并给出了原型链中修改属性对所有实例的影响。
摘要由CSDN通过智能技术生成
// 实现原型链的基本模式
function Super() {
    this.value = 'Super';
    this.color = ["red", "blue", "green"];
}

Super.prototype.getSuperValue = function () {
    return this.value;
}

function Sub() {
    this.a = 'a'
    this.subValue = 'Sub';
}
Sub.prototype = new Super();
Sub.prototype.getSubValue = function () {
    return this.subValue;
}
var subObj1 = new Sub();
subObj1.subValue = 'subObj1'
console.log(subObj1.getSubValue());//subObj1
console.log(subObj1.getSuperValue());//Super
console.log(subObj1.a);//a
subObj1.a = 'subObj1a';
console.log(subObj1.a);//subObj1a

subObj1.color.push('pink');
console.log(Sub.prototype.color);//[ 'red', 'blue', 'green', 'pink' ]
console.log(subObj1.color);//[ 'red', 'blue', 'green', 'pink' ]

subObj1.color = ['a', 'b'];
console.log(Sub.prototype.color);//[ 'red', 'blue', 'green', 'pink' ]
console.log(subObj1.color);//['a', 'b']
subObj1.color.push('c');//子类自己有了color,就不会去找原型的color了,所以这时候更改的是实例自己的color
console.log(Sub.prototype.color);//[ 'red', 'blue', 'green', 'pink' ]
console.log(subObj1.color);//[ 'a', 'b', 'c' ]

var subObj2 = new Sub();
console.log(subObj2.getSubValue());//Sub
console.log(subObj2.getSuperValue());//Super
console.log(subObj2.a);//a

Sub.prototype.value = 'hello world';
console.log(subObj1.getSuperValue());//hello world
console.log(subObj2.getSuperValue());//hello world
console.log(Sub.prototype.color);//[ 'red', 'blue', 'green', 'pink' ]
console.log(subObj2.color);//[ 'red', 'blue', 'green', 'pink' ]


1.每个实例单独保存构造函数的变量,互不影响
2.同类型的实例共同拥有原型拥有的变量,只要原型的指向不变,修改其中的某一变量
所有实例的该变量值都会对应修改,即互相影响
3.读取某一实例的变量,先读实例有没有,没有才会去原型链上找
4.所有函数的默认原型都是Object的实例
5.如果原型中包含引用类型值,则通过实例可以更改这个引用值,而不是常规的->构造函数名.prototype.引用类型变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值