PhoneGap中文网

标题: javascript中__proto__与prototype区别 [打印本页]

作者: w8484855@qq.com    时间: 2017-8-11 16:37
标题: javascript中__proto__与prototype区别
本文和大家分享的主要是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
来源:简书






欢迎光临 PhoneGap中文网 (http://bbs.phonegap100.com/) Powered by Discuz! X3.2