原型链.png
注解
- 红虚线即原型链,各类实例都是通过原型链继承到各数据类型本身的方法和属性。比如Object原型对象包含着对象的原生方法。
- 函数实例通过原型链指向了Object的原型,所以函数实例也可作为对象使用。比如Jquery,
Jquery.ajax()
就是当对象使用,Jquery("div")
就是当函数使用。
相关扩展
-
instanceof
运算符用于测试构造函数的prototype属性是否出现在对象的原型链中的任何位置。是的话,即此对象就是此构造函数的实例。new Function() instanceof Object // true // 函数是 Object的实例。
hasOwnProperty
判断一个对象本身是否有此名称的属性,此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员。in
判断的是对象的所有属性,包括对象实例及其原型链的属性;改变一个对象的
Prototype
属性,是一个非常影响性能的操作,如果你关心性能,你就不应该在一个对象中修改它的 Prototype.。比如obj.__proto__ =
或者Object.setPrototypeOf
等操作。可以使用Object.create()
创建一个新对象,并指定某个对象为它的原型对象。当
Object.prototype.__proto__
已被大多数浏览器厂商所支持的今天,其存在和确切行为仅在ECMAScript 2015规范中被标准化为传统功能,以确保Web浏览器的兼容性。为了更好的支持,建议只使用Object.getPrototypeOf()
。Object.getPrototypeOf()
是替代__proto__
用来获取实例对象的原型,并不能获取构造函数的prototype
。根据方法的名称理解,很容易混淆它的用法。