zoukankan      html  css  js  c++  java
  • 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中会进行讨论。

     

    总结:

    1. 优先使用标准方法Object.getPrototypeOf。而不是非标准的__proto__属性。

    2. 为非ES5环境实现一个Object.getPrototypeOf方法。从而保持代码的一致性。

  • 相关阅读:
    JS元素分组统计
    并发工具类
    【Spring-Cloud】mall eureka微服务模块建立
    【Spring-Cloud】mall父工程建立
    【MySQL】创建函数和存储过程,批量插入大数据
    【JAVA】http 状态
    【JAVA】如何写好代码
    【Docker】dockerfile,支持jdk8、 sshd、 python3.6
    【Hadoop】MapperReduce WordCount 代码示例
    【Hadoop】YARN 完全分布式配置
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6884224.html
Copyright © 2011-2022 走看看