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 |