通天战队|「翻译」JavaScript的可视化学习之五:原型继承( 三 )


因为“Chihuahua.prototype”具有“smallBark”函数 , 并且“Dog.prototype”有“bark”函数 , 我们可以在“myPet”上访问“smallBark”和“bark”!
正如你想象的 , 原型链不会永远延续下去 。 最终有一个对象的“prototype”等于“null”:“Object.prototype”!如果我们试图访问在本地或原型链上找不到的属性时 , 会返回“undefined” 。
通天战队|「翻译」JavaScript的可视化学习之五:原型继承9、子类沿着原型链查找父类的方法 , 直到__proto__属性为null 。
虽然我在这里用构造函数函数和类解释了所有的事情 , 但是向对象添加原型的另一种方法是“Object.create”方法 。 用这个方法 , 我们可以创建一个新的对象 , 并且可以精确地指定该对象的原型应该是什么!
我们通过将现有对象作为参数传递给“Object.create”方法 。 这个对象就是我们创建的对象的原型!
const person = {name: 'Lydia',age: 21}const me = Object.create(person)【通天战队|「翻译」JavaScript的可视化学习之五:原型继承】让我们输出我们刚刚创建的“me”对象 。
通天战队|「翻译」JavaScript的可视化学习之五:原型继承我们没有向“me”对象添加任何属性 , 它只包含不可枚举的“__proto__”属性!“__proto__”属性指向我们定义为原型的对象引用:“person”对象 , 它有一个“name”和一个“age”属性 。 由于“person”对象是一个对象 , 因此“person”对象的“__proto__”属性的值为“Object.prototype”(但是为了让它更容易阅读 , 我没有在gif中扩展这个属性!)
希望您现在了解了为什么原型继承在JavaScript奇妙世界中是如此重要的特性!如果你有问题 , 请随时联系我!
翻译来源:


推荐阅读