简单理解js的prototype属性

prototype属性是您有能力向对象添加属性和方法;

先介绍一个下面要用到的函数,JSON.stringify(value)。

这个函数的作用是:把传入的参数value(对象或者数组)变成字符串,它有三个参数,第一个参数是必须的,其余的两个参数可填可不填。

var ob = { };//超级简单的空对象
alert(JSON.stringify(ob.prototype));

它alert的东西是undefined,也就是说object这个属性prototype不是个东西

我可以很明白的告诉你,prototype绝对不是给对象用的,对象根本没办法引用prototype这个属性,它真正的属主,其实是函数

记住,能够引用prototype的东西绝对是函数

 prototype是函数的一个属性,是函数的原型对象。prototype只能够被   函数     调用。

//首先定义一个有名函数func
function func(){
    
}
alert(func.prototype);

返回的就是对象

prototype是函数的一个属性,也是函数的原型对象,而这里func函数引用prototype的时候返回的是一个对象object的,那么,结合这两个概念,你能得出什么结论呢?我想通过这不难得出结论:

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

alert的结果是一个空对象

function func(){
    
}
func.prototype.name ='prototype是函数的的属性,本质是函数的原型对象';
alert(JSON.stringify(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,确实能够调用get函数,上面已经利用ob1调用get函数alert出来了,这就证明func函数的实例对象是拥有get这个属性函数的

特别指出:

           Array.prototype是一个数组

       String.prototype是一个字符串

       Object.prototype是一个对象

           这三个特殊例子,不像构造函数的prototype一样

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

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

要想深入理解可以看下一篇文章 深入理解js的prototype以及prototype的一些应用

猜你喜欢

转载自blog.csdn.net/sunlizhen/article/details/88990883