const myDate = new Date(1995, 11, 17);
console.log(myDate.getYear()); // 95
myDate.getYear = function() {
console.log('something else!')
};
myDate.getYear(); // 'something else!'在这个上传的代码中,预期的输出是“this”,但我不明白当我们在对象原型中定义同名的对象时,它将如何创建阴影,以及构造函数如何在其上工作。
发布于 2022-09-03 13:54:57
Javascript继承通过在prototype类的对象实例上定义新方法来工作。例如:如果要扩展一个类基,则创建一个新函数,并将其原型设置为Base实例,然后在该实例上添加任何您想要的额外方法。
实例是带有指向原型的指针的空对象。访问属性的逻辑是先检查它自己的对象,然后打开原型链,然后在属性不在的情况下返回undefined。例如:如果您在设置this.getYear之前和之后编写它,您将得到两个不同的结果,因为访问器将开始在实例上查找属性,然后结束其搜索。
V8和现代JS引擎已经有了不需要进入这个兔子洞的选项,但是它的工作方式仍然应该像它仍然是一个链接的对象列表一样。
当然还有。任何属性都可以是一个方法,而且您不能有一个方法和一个属性具有相同的名称,因为它们共享名称空间。例如:您可以执行此myDate.getYear = 2022;,这样myDate.getYear将返回2022,但myDate.getYear()将以应用程序错误结尾,因为该属性不包含可应用的函数对象。
https://stackoverflow.com/questions/73592081
复制相似问题