关于js的prototype属性

clipboard.png
不是说js中所有对象都有prototype属性吗?为什么我的实例函数girl 没有prototype属性 但是内部的sayHello却有prototype属性?

阅读 4.6k
7 个回答

function才有prototype,object没有。你的girl是new出来的object,没有。sayHello是个function,有。

我们创建的每个函数都有一个 prototype(原型)属性,这个属性是一个指针,指向一个对象,
而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法。

无论什么时候,只要创建了一个新函数,就会根据一组特定的规则为该函数创建一个prototype属性,这个属性指向函数的原型对象。在默认情况下,所有原型对象都会自动获得一个constructor(构造函数)属性,这个属性包含一个指向 prototype 属性所在函数的指针。

应该说每个函数都有prototype的属性,函数的prototype的属性指向的是一个对象,比如

function Person(){
    
}
Person.prototype.name = 'demo'
var person = new Person()
console.log(person.name)//demo 

prototype和[[Prototype]]或者叫__proto__是不一样的,每一个对象都有__proto__,而函数才有prototype。举个列子吧。
function A(){}
var a = new A()
A有prototype,而a只有__proto__.
关系如下
a.[[Prototype]] ----> Prototype(A的原型对象) <---- A.prototype
Prototype初始化有constructor和__proto__
constructor指向A,
__proto__指向Object.prototype
__proto__是每一个对象都有的,甚至这样都可以的
"".__proto__(当然这样写,是因为包装过后的结果)

谢谢,我刚刚还以为[[Prototype]] 和prototype是一样的。看了很多资料 大概了解了一些

新手上路,请多包涵

对象和函数的原型描述是不一样的,名字不一样!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题