首先看看,W3School关于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是函数的一个属性,本质就是函数的原型对象。
版权属于:谁把年华错落成诗 所有,转载请注明出处!
本文链接:https://blog.pomears.com/archives/28.html
如果博客部分链接出现404,请留言或者联系博主修复。