在ES5中,我们都可以这样做:
myClass.prototype.myMethod = (function () {return function() {}})();我能用ES6类文字做同样的技巧吗?
发布于 2016-09-02 16:50:15
不,至少现在还没有。ES6类只支持声明方法,所以任何不是直接方法的东西(这包括间接地对方法进行评估的东西,比如IIFE)仍然必须用原型声明。
但是,ES6类实际上与ES5构造函数的工作方式相同,只是语法更加简洁,所以仍然可以这样做:
class MyClass {
constructor() {
/* initialize */
}
regularMethod() {
/* some stuff */
}
}
MyClass.prototype.myMethod = (function() { return function() })()这相当于:
function MyClass() {
/* initialize */
}
MyClass.prototype.regularMethod = function() {
/* some stuff */
}
MyClass.prototype.myMethod = (function() { return function() })()发布于 2019-04-03 18:28:49
2019年更新
,,你能做到的。
您只需要像一个“函数表达式”一样创建IIFE (将它赋值给一个变量)
class MyClass {
IIFE = (() => {
let textArrayCreatedJustOnce = ['text A', 'text B', 'text C'];
console.log('Only called in object creation');
return () => {
console.log(textArrayCreatedJustOnce[1]);
}
})()
}
let myClassInstance = new MyClass(); //log: 'Only called in object creation'
myClassInstance.IIFE(); //log: 'text B'
myClassInstance.IIFE(); //log: 'text B'
myClassInstance.IIFE(); //log: 'text B'
发布于 2017-06-02 14:57:28
这是有可能的板条箱装饰:
function iife(target, key, { value: fn, configurable, enumerable }) {
return {
configurable,
enumerable,
value: fn(),
};
}并把它当作:
class MyClass {
@iife
methodName() {
/* some stuff */
return function() {
/* real method content */
}
}
}如果我需要一些重的临时变量,比如向量矩阵,而我不想为每个方法调用设置这些变量,我就使用它。
https://stackoverflow.com/questions/39297258
复制相似问题