Tri*_*ara 6 javascript ecmascript-6
在ES5中我们都可以这样做:
myClass.prototype.myMethod = (function () {return function() {}})();
Run Code Online (Sandbox Code Playgroud)
我能用ES6类文字做同样的技巧吗?
不,至少还没有.ES6类仅支持声明方法,因此任何不直接作为方法的东西(包括间接评估方法的东西,如IIFE)仍必须使用原型声明.
但是,ES6类实际上与ES5构造函数的工作方式相同,只是语法更清晰,所以你仍然可以这样做:
class MyClass {
constructor() {
/* initialize */
}
regularMethod() {
/* some stuff */
}
}
MyClass.prototype.myMethod = (function() { return function() })()
Run Code Online (Sandbox Code Playgroud)
这相当于:
function MyClass() {
/* initialize */
}
MyClass.prototype.regularMethod = function() {
/* some stuff */
}
MyClass.prototype.myMethod = (function() { return function() })()
Run Code Online (Sandbox Code Playgroud)
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'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1430 次 |
最近记录: |