gpt4 book ai didi

Javascript 不调用原型(prototype)方法

转载 作者:数据小太阳 更新时间:2023-10-29 05:18:11 25 4
gpt4 key购买 nike

我尝试覆盖一个方法和脚本是:

function wrapper(target) {
target.doABC = function () {
alert('in wrapper');
};
return target;
}

function Model() {
wrapper(this);
}

Model.prototype.doABC = function () {
alert('in Model');
};

var a = new Model();
a.doABC();

结果是“包装”。不知道为什么?

最佳答案

任何 JavaScript 对象都有自己的继承的 属性。 Own 是直接在实例上定义的,inherited 是从 prototype 中获取的对象。
使用属性访问器 时,JavaScript 首先在对象的自己的属性列表 中进行搜索。如果未找到该属性,它将在对象的原型(prototype)链中搜索。

在您的示例中,wrapper()方法在对象实例上定义了自己的属性 doABC ,这是一个提醒 'in wrapper' 的功能.即使对象具有具有相同属性的原型(prototype) doAbc警报 'in Model' , JavaScript 无论如何都会使用自己的属性。

function wrapper(target) {
// Define an own property "doABC"
target.doABC = function () {
alert('in wrapper');
};
return target;
}

function Model() {
wrapper(this);
}

// Define an inherited property "doABC"
Model.prototype.doABC = function () {
alert('in Model');
};

var a = new Model();

//Use the own property "doABC". The inherited "doABC" is ignored.
a.doABC();

另外,可以使用 delete 删除自己的属性运算符(operator)。删除后,对象将使用继承的属性。

// delete the own property "doABC"
delete a['doABC'];

// the inherited "doABC" will be used. Alerts "in Model"
a.doABC();

检查完整 working demo .

关于Javascript 不调用原型(prototype)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37064478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com