首先看看,W3School关于prototype的介绍:

js的prototype

如果Object.prototype.name = value能够向对象添加属性

那么Object.prototype则是指向的这个object的原型对象,prototype则是这个Object的一个属性

我们抛出代码来证明我的结论

//首先定义一个有名函数func
function func(){
    
}
console.log(typeof(func.prototype));//object
console.log(JSON.stringify(func.prototype));//{}

根据结果可知prototype是函数的属性,但本质是函数的原型对象。至于为什么第二个打印为空,因为我们并没有对这个原型对象添加方法

那么我们对这个原型对象添加属性或者方法,再打印试试

function func(){
    
}
func.prototype.name = "Hello World"
console.log(JSON.stringify(func.prototype));//{"name":"Hello World"}

所以现在这个原型对象就能有属性或者方法啦

那么我们怎么去调用这个原型对象的属性或者方法?

很简单,属性函数必须由它的对象来调用,那么我们用关键字new来实例化func函数的原型对象就行了

function func(){
        
}
func.prototype.name = "Hello World"
let obj1 = new func()
console.log(obj1.name)//Hello World

如果我们把原型对象实例化成另外一个对象obj2,那么这个obj2对象依然能够调用这个属性或者方法

function func(){
        
}
func.prototype.name = "Hello World"
let obj1 = new func()
console.log(obj1.name)//Hello World
let obj2 = new func()
console.log(obj2.name)//Hello World

因此得出结论:

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

参考:简单理解js的prototype属性

Last modification:October 28, 2019
If you think my article is useful to you, please feel free to appreciate