javascript - 这个函数是如何在 JavaScript 中沿着原型(prototype)链向上爬的?

标签 javascript prototype prototypal-inheritance

这是类(class)中的一个练习,其中创建了一个函数来模拟如何从对象中检索属性,以便您更好地了解正在发生的情况。

DOT = function dotFunc(obj, prop){
  // if this obj has this property just return it
  if(obj.hasOwnProperty(prop)){
      return obj[prop];

  // otherwise keep waking up the proto chain
  } else if (obj.__proto__){
      return DOT(obj.__proto__, prop);
  }
};

我的问题是 else if... 我认为它是在说“如果这个对象有一个 __proto__ 属性,则再次返回 DOT 函数,但这次使用 obj.__proto__ 作为第一个值。这本质上是在做吗? obj.__proto__.__proto__.__proto__ 递归直到找到属性?

最佳答案

嗯,@georg 简单地回答道:“答案是肯定的”

如果我必须在此基础上进行开发,您的递归函数实际上将返回两个值:属性值或未定义

因为隐式地,如果属性不在原型(prototype)链中,那么 if/else 将不会返回,并且该函数将不返回任何内容,默认返回 未定义

HTH☺

关于javascript - 这个函数是如何在 JavaScript 中沿着原型(prototype)链向上爬的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35816571/

相关文章:

javascript - NativeScript:在 mustache 语法中通过 "!"翻转 bool 值,即 {{ !true }}

javascript - 防止表单在刷新时重新发布

javascript 原型(prototype)与 this

javascript - webpack开发服务器不是在内存中生成bundle.js吗?

javascript 原型(prototype)对象 this 值

javascript - JavaScript 哈希中的唯一值

javascript - Object.getPrototypeOf(classInstance) 返回 Object {}

javascript - 属性应该出现在原型(prototype)上吗?

javascript - 如何使用原型(prototype)函数更新实例属性并从另一个函数访问它?

Javascript - 如何检测文档是否已加载(IE 7/Firefox 3)