一、关于javascript的原型与隐式原型
1.prototype
首先function是一个对象,每一个function都具有一个prototype对象,prototype对象默认是{constructor:f},一个指向函数本身的对象。
即:
function a(){}
=>undefined
a.prototype
=>{constructor:f}
a.prototype.constructor
===>function a(){}
2.隐式原型
首先除开function、Object对象外没有对象拥有prototype属性,并且每个对象都有一个隐式原型对象_proto_。该属性是一个隐藏属性,javascript不希望开发者使用该属性。
即:
var b=1;
=>undefined
b._proto_
=>Number {constructor:f Number(),......,_proto-:Object}
我们可以看到b是一个数字变量,它的构造是由Number()函数创建出来的,最后 b._proto_._proto_ 是Object ,以此可见一切皆是对象
Object.prototype._proto_
===>null
这里我们就可以看到对象的本质其实什么都没.
3.函数的隐式原型
上面我们定义了a方法,既然是方法对象,那么a应该不光有原型还理应有隐式原型。
即:
a.prototype===>{constructor:f} //a的原型
a._proto_===Object.prototype //a的隐式原型
Object.prototype.constructor===>function Object(){}
4.我的理解
还是面向对象的思想,这里面非常绕。为方便理解,我是这样想的:本质上什么都没有!程序员写了Object代码(最最最基础的代码)可以创建Object对象(包含非常基础简单的功能),在Object代码的基础上,再加些其它代码提升功能就变成了其它的方法代码。当实例化这些代码为对象时,代码中Object的代码部分也会被实例化到内存中。这应该就是继承了!