最近javascript的学习小记

一、关于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的代码部分也会被实例化到内存中。这应该就是继承了!

猜你喜欢

转载自www.cnblogs.com/Renzhendew0/p/10313832.html