首页 > 代码库 > Effective JavaScript Item 31 优先使用Object.getPrototypeOf,而不是__proto__
Effective JavaScript Item 31 优先使用Object.getPrototypeOf,而不是__proto__
本系列作为Effective JavaScript的读书笔记。
在ES5中引入了Object.getPrototypeOf作为获取对象原型对象的标准API。但是在很多执行环境中,也提供了一个特殊的__proto__属性来达到同样的目的。
因为并不是所有的环境都提供了这个__proto__属性,且每个环境的实现方式各不相同,因此一些结果可能不一致:
// 在某些环境中 var empty = Object.create(null); // object with no prototype "__proto__" in empty; // false (in some environments) // 在某些环境中 var empty = Object.create(null); // object with no prototype "__proto__" in empty; // true (in some environments)
所以当环境中支持Object.getPrototypeOf方法时,优先使用它。即使不支持,也可以为了实现一个:
if (typeof Object.getPrototypeOf === "undefined") { Object.getPrototypeOf = function(obj) { var t = typeof obj; if (!obj || (t !== "object" && t !== "function")) { throw new TypeError("not an object"); } return obj.__proto__; }; }
上述代码首先会对当前环境进行检查,如果已经支持了Object.getPrototypeOf,就不会再重复定义。
另外,在使用__proto__时会导致一些错误,在Item 45中会进行讨论。
总结:
- 优先使用标准方法Object.getPrototypeOf,而不是非标准的__proto__属性。
- 为非ES5环境实现一个Object.getPrototypeOf方法,从而保持代码的一致性。
Effective JavaScript Item 31 优先使用Object.getPrototypeOf,而不是__proto__
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。