gpt4 book ai didi

Javascript 私有(private)/公共(public)继承语法

转载 作者:行者123 更新时间:2023-11-30 08:04:45 25 4
gpt4 key购买 nike

我在将私有(private)/公共(public)方法与 Javascript 中的继承结合起来时遇到了问题。我认为这只是我的误会,希望能轻松解决。

这是我的:

RB = {};
RB.Fruit = function() {
// Public
this.getType = function() {
return "FRUIT";
}
}

RB.Orange = function() {

// Private
function makeOrangeJuice() {
console.log("Orange has been squeezed.");
}

// Public
return {
getName : function() {
return "Orange";
}
}
}
RB.Orange.prototype = new RB.Fruit();
var o = new RB.Orange();
console.log(o.getType());

当我运行这段代码时,我收到错误“Uncaught TypeError: Object # has no method 'getType'”。我知道这与在类函数中使用“return”有关(因为将 getName 方法移出“return” block 允许它工作),但我希望继续能够声明 private/类中的公共(public)方法。

如何修改它以允许 RB.Orange 访问 RB.Fruit.getType 函数?

谢谢!

最佳答案

在 JavaScript 中,构造函数调用隐式返回新构造的实例,但是构造函数可以通过显式返回不同的对象来覆盖默认行为。例如,如果您像这样定义一个“构造函数”Foo:

function Foo() {
return new Date();
}

然后语句 foo = new Foo() 会将 foo 设置为新的 Date不是新的 Foo

如果我理解正确你想要什么,你只需要改变这个:

    return {
getName : function() {
return "Orange";
}
}

(由此您的“构造函数”返回一个全新的对象,只有一个 getName 方法,与正在构造的对象无关)对此:

    this.getName = function() {
return "Orange";
};

(由此它向正在构建的对象添加了一个getName 方法,并且仍然允许返回该对象)。

关于Javascript 私有(private)/公共(public)继承语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20086040/

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