不是说js中所有对象都有prototype属性吗?为什么我的实例函数girl 没有prototype属性 但是内部的sayHello却有prototype属性?
不是说js中所有对象都有prototype属性吗?为什么我的实例函数girl 没有prototype属性 但是内部的sayHello却有prototype属性?
我们创建的每个函数都有一个 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__(当然这样写,是因为包装过后的结果)
13 回答12.7k 阅读
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
6 回答812 阅读✓ 已解决
6 回答1k 阅读
2 回答1.3k 阅读✓ 已解决
function才有prototype,object没有。你的girl是new出来的object,没有。sayHello是个function,有。