gpt4 book ai didi

javascript - 在类内的函数内创建函数

转载 作者:行者123 更新时间:2023-12-02 14:12:10 25 4
gpt4 key购买 nike

假设我有一些类,里面有一些函数:

var someClass = class someClass() {
constructor() {}

someFunction(someObj)
{
function anotherFunction() {
return JSON.stringify(someObj, null, 2);
}

return someObj;
}
}

在这种情况下,我可以调用 someClass.someFunction(someObj),它会返回 [object Object]。在尝试调用 someClass.someFunction(someObj).anotherFunction() 时,它会出现 TypeError: someClass.someFunction(...).anotherFunction is not a function .

我该如何规避这个问题?我尝试创建类似 someClass.prototype.someFunction.anotherFunction = function() {...} 的原型(prototype),但这不起作用。

提前非常感谢,@Medallyon。

最佳答案

您正在创建一个函数 (anotherFunction),但从未对其执行任何操作。 JavaScript 引擎可能会完全优化它。

如果您希望可以在 someFunction 外部访问它,则需要执行一些操作以使其可以在 someFunction 外部访问。你可能会返回。或者返回一个将其作为属性的对象。或者将其作为属性添加到 someObj (尽管这不太常见)。

例如,这里我们返回一个新对象,其中包含函数和原始 someObj (因为您出于某种原因返回了该对象):

var someClass = class someClass {
constructor() {}

someFunction(someObj) {
function anotherFunction() {
return JSON.stringify(someObj, null, 2);
}

return {
someObj, anotherFunction
};
}
};

var sc = new someClass();
var o = sc.someFunction({
foo: "bar"
});
console.log(o.anotherFunction());

<小时/>

旁注:

  • 您的 someClass 声明不正确;你不应该在 var someClass = class someClass() {.

  • 之后加上 ()
  • 如果变量名和类名相同,则其中的 var someClass = 部分毫无意义。如果它们不同,至少使用 let ,这样变量的提升与类的提升是相同的(例如,它只是半提升)。

  • JavaScript 中的压倒性约定是构造函数以大写字母开头;所以SomeClass,而不是someClass。虽然您可以在自己的代码中使用您喜欢的任何约定,但我强烈建议使用这个约定,它可以帮助人们阅读您的代码。至少,提问时要遵循它。

关于javascript - 在类内的函数内创建函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39437973/

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