提问人:JVJplus 提问时间:10/30/2020 最后编辑:Donald DuckJVJplus 更新时间:7/15/2021 访问量:42
为什么我们不能通过obj.prototype.function()访问函数,为什么原型函数不能访问'this'?
Why can't we access function via obj.prototype.function(), why prototype function can't access 'this'?
问:
3 个不同的调用彼此之间有何不同?
let Person=function(name){
this.name=name;
};
Person.prototype.func=function(){
console.log('Hey I am '+this.name);
};
let jay=new Person("jay");
jay.func(); /*This Works*/
jay.__proto__.func(); /*This doesn't have access to this.name? why?*/
jay.prototype.func(); /*This gives error, Why?*/
答:
3赞
CertainPerformance
10/30/2020
#1
当你这样做时
jay.__proto__.func();
您可以使用最后一个点之前的所有内容的调用上下文调用该函数:即,使用 的 ,它与 是相同的对象:func
this
jay.__proto__
Person.prototype
let Person=function(name){
this.name=name;
};
Person.prototype.func=function(){
console.log(this === Person.prototype);
console.log(this === jay.__proto__);
};
let jay=new Person("jay");
jay.__proto__.func();
该属性位于实例本身上。它不在原型上,因此在方法内部引用 when 是原型不会显示实例的属性。name
jay
this.name
this
name
如果您改用: ,也可以使调用以正确的方式工作: ,这将调用设置为 not 的函数。this
.call
jay.__proto__.func.call(jay);
this
jay
jay.__proto__
jay.prototype.func();
/这会产生错误,为什么?/
该物业有点令人困惑。它通常只有在它是函数的属性时才有意义,在这种情况下,从该函数创建的实例具有该原型对象的内部原型(或)。.prototype
__proto__
在正常情况下以及几乎其他任何地方,该属性并不意味着任何特殊之处,并且可能不存在。所以 中不存在任何内容。.prototype
jay.prototype
评论
0赞
JVJplus
10/30/2020
谢谢,我理解 .prototype 用于类或函数构造函数,而 .__proto__ 用于实例。
评论