gpt4 book ai didi

JavaScript 原型(prototype)扩展

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:35:20 26 4
gpt4 key购买 nike

我正在尝试扩展一个抽象对象。

var Abstract = function() { code = 'Abstract'; };
Abstract.prototype.getCode = function() { return code; };
Abstract.prototype.getC = function() { return c; };

var ItemA = function() { code = 'ItemA'; c = 'a'; };
ItemA.prototype = Object.create(Abstract.prototype);
ItemA.prototype.constructor = ItemA;

var ItemB = function() { code = 'ItemB'; };
ItemB.prototype = Object.create(Abstract.prototype);
ItemB.prototype.constructor = ItemB;

var b = new ItemB();
console.log(b.getCode());
var a = new ItemA();
console.log(b.getCode());
console.log(b.getC());

结果:

ItemB
ItemA
a

我在 ItemB 实例中获取 ItemA 的范围是否有任何特殊原因?我该如何解决?

最佳答案

这是因为你使用了全局变量。使用 this 关键字修复它:

var Abstract = function() { this.code = 'Abstract'; };
Abstract.prototype.getCode = function() { return this.code; };
Abstract.prototype.getC = function() { return this.c; };

var ItemA = function() { this.code = 'ItemA'; this.c = 'a'; };
ItemA.prototype = Object.create(Abstract.prototype);
ItemA.prototype.constructor = ItemA;

var ItemB = function() { this.code = 'ItemB'; };
ItemB.prototype = Object.create(Abstract.prototype);
ItemB.prototype.constructor = ItemB;

尽管在这种情况下 ItemB.getC() 将返回 undefined。

关于JavaScript 原型(prototype)扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15190676/

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