假设我有一些带有某些功能的类:
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() {...}
的原型,但这是行不通的。提前谢谢了,
@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
。尽管您可以在自己喜欢的代码中使用任何约定,但我强烈建议您使用此约定,它可以帮助人们阅读您的代码。至少在提问时要遵循它。