聊一下javascript对象中的一个基本知识点:属性的读写不对等。
首先我们实现一条原型链,让对象b继承对象a,对象属性如下所示:
//因为重点不是继承,所以实现继承的方法不做介绍
var a = {
name: 'ben',
age: 18
}
var b = {
salary: 88888888
}
console.log(b.name) // 'ben'
之所以能够读取到name
属性是因为b
继承与a
,当读取b
的name
属性的时候,发现b
没有这个属性,那么就会沿着原型链向上查找,在a
那里找到了name
属性,就可以获取到值,然后输出出来;如果沿着整条原型链都不能找到,就会输出undefined
;
b.name = 'haha';
console.log(b.name); //'haha'
console.log(a.name); //'ben'
任何时候,对一个对象的属性进行写入操作的时候,都只是真对当前对象的操作,如果当前对象没有这个属性,那么会新创建一个,如果有,则进行修改它的值。但无论如何都不会影响到他所在原型链上的任何对象的同名属性的值。
由此久出现了对象属性的读写不对等:如果自己没有,读可以逆流而上的去寻找读取;而写,却只能写到自身的当前对象里面去。