JS 是原型继承,因为它是动态的。 虽然ES6 引入class关键字,但只是语法糖,JavaScript 仍然是基于原型的。
原型继承导致JS的调用是沿着原型链(prototype chain)遍历进行的。
如果对象 a = {var1: 1, var2: 2},而 a 的原型 b = {var2: 20000, var3: 3},那么:
console.log(a.var1) // 1
console.log(a.var2) // 2
console.log(a.var3) // 3 “因为当前对象内没有,所以沿着原型链寻找,直至null结束”
console.log(a.var4) // undefined
遍历整个原型链是非常浪费的,可以使用 hasOwnProperty 判断。