简单理解js的prototype属性及使用(2)

prototype是········函数的原型对象············,这能理解吗?不能理解,没有关系,我们再来做一个实验,终于要用到文章开始给你们介绍的一个函数JSON.stringify()了。

function func(){ } alert(JSON.stringify(func.prototype));

还是引用上面的函数func,只不过这里返回的是JSON.stringify()函数的返回值。

简单理解js的prototype属性及使用

你没有看错,这里alert的结果是一个空对象,这证明,prototype的的确确属于函数的属性,并且函数的prototype属性的js数据类型是对象,明白不?为什么现在是一个空对象?你有没有想过?为什么呢?请思考这个问题三秒钟,假如想不出来,那么没有关系,下面,我来解释。

先看,实验代码:

function func(){ } func.prototype.name ='prototype是函数的的属性,本质是函数的原型对象'; alert(JSON.stringify(func.prototype))

你说,上面的代码会alert出什么呢?请看下面:

简单理解js的prototype属性及使用

你没有看错,此刻,终于alert出东西来了,我在这里给prototype赋于一个属性name,所以,我这个时候在alert函数func的prototype时,你看到有值了吗?看到了prototype的属性name值了吗?现在再想想,为什么上面第一层alert函数func.prototype的时候,它是一个空对象呢?而现在它又是一个有值的对象呢?

原因很简单呢,因为第一次的时候,我没有给函数的属性func.prototype赋予name属性,也没有给name属性赋值啊,而现在我已经给函数的属性func.prototype赋予属性name,并且赋值为········prototype是函数的的属性,本质是函数的原型对象······,所以,现在alert函数的属性func.prototype的时候它就有值啦,对吧?

因此,这里得出结论:

prototype是函数的的属性,本质是函数的原型对象。

别以为js中只有对象才有属性,通过这里,我们也可以知道,其实js的函数也是有属性的,而且js的函数好像就只有这个属性prototype,而且js的这个函数属性同时还是函数的原型对象,你是不是被搞晕了?希望你没有被搞晕才好。

为什么说prototype是函数的一个属性呢?因为,只有函数才能调用prototype,而且是以这样的方式func.prototype调用的,这样的方式调用东西是不是和对象调用属性一模一样呢?是的,就是因为函数调用prototype的时候是和对象调用属性的时候一样的,我们才把prototype说成是函数的一个属性,而函数的这个属性其实是一个对象(这个是不是对象,上面已经证明了,这里就不再说明),所以说,这个prototype就是函数的属性,本质是函数的原型对象。

这里为什么强调说prototype的本质是函数的原型对象呢?

下面看代码证明,我的代码很简单的:

//定义一个函数 function func(){ } //给函数的属性prototype赋予一个方法get func.prototype.get=function(value){ return value;//很简单,你给我什么我就输出什么 }

你说,怎么调用上面那个get方法?

我给你一点提示,get是属于func函数的一个属性函数,既然是属性函数,那么我们怎么调用呢?

很简单,属性函数必须由它的对象来调用,那么我们怎么获取get的对象呢?很简单,用关键字new来实例化func函数的对象就行了吗?是吧?

下面,实例化func函数的一个对象ob1:

var ob1 = new func(); //用func实例化出来的对象来调用get属性函数 alert(ob1.get('hello,prototype原型对象'));

简单理解js的prototype属性及使用

没错,用func函数实例化出来的对象ob1,确实能够调用get函数,上面已经利用ob1调用get函数alert出来了,这就证明func函数的实例对象是拥有get这个属性函数的,对吧?这么明显,就不用说明了吧。

如果,你不信必须要用实例化func的对象来调用get函数,你可以试试直接用func调用get函数,也就是说,你可以尝试着func.get()调用一下get函数看看,看func它到底能不能够直接调用get函数。我想一定报错,呵呵,原因是什么,你自己想。

那么,说了这么多,我还是没有说明,为什么我说prototype的本质是函数的原型对象啊?对吧?

请看,下面的代码:

var ob2 = new func(); //用func实例化出来的对象来调用get属性方法 alert(ob2.get('我依然是func实例化出来的对象'));

简单理解js的prototype属性及使用

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwfszw.html