本文和大家分享的主要是javascript 中__proto__ 与prototype相关内容,一起来看看吧,希望对大家 学习javascript有所帮助。 __proto__ (隐式原型 implicit prototype link) prototype (显示原型 explicit prototype property) 关系: 隐式原型指向创建这个对象的函数(constructor)的prototype 1.先看一般的对象实例 var obj = {}, str = 'nihao', num = 99; obj.prototype // => undefined str.prototype // => undefinednum.prototype // => undefined obj.__proto__ //=> Object{...} str.__proto__ //=> String{...}num.__proto__ //=> Number{...} 2.再看Function Object.__proto__ //=> function(){...} Object.prototype //=> Object{...} String.__proto__ //=> function(){...} String.prototype //=> String{...} function Foo() { ... } Foo.__proto__ //=> function(){...} Foo.prototype //=> Object{constructor: function} __proto__ 指向构造函数的原型, 这样保证实例能够访问在构造函数原型中的属性和方法. prototype 是方法(Function)特有的属性, 这个属性是一个对象, 包含所有实例共享的属性和方法, 其中有一个属性叫做constructor, 指向原构造函数 所以有: var foo1 = new Foo(), foo2 = new Foo(); foo1.__proto__ === Foo.prototype //=> true foo2.__proto__ === foo1.__proto__ //=> true Foo.prototype.constructor === Foo //=> true 那么Foo.__proto__指向哪里呢? Foo.__proto__ === Function.prototype //=> true 同理Object, String, Number的__proto__都指向 Function.prototype 那么Function.prototype.__proto__指向哪里? Function.prototype.__proto__ === Object.prototype //=> true 最后 Object.prototype.__proto__ === null //=> true 总结: 用oop的思维来说, 就是prototype是用来给子类继承的, 而__proto__ 指向了父类的prototype 来源:简书
|