javascript - 实验:JavaScript 实例本身可以是构造函数并拥有自己的一组实例吗?
问题描述
let bar;
function foo(){
this.x=x;
this.y=y;
}
bar=new foo(1,2);
/*Since all functions in javascript are objects.
Why can't an instance an object be a constructor itself?*/
!function bar(a,b){
this.a=a;
this.b=b;
}(); // (1)
let bar1=new bar(3,4);
console.log(bar1.a);
(1):使用命名的IIFE,bar可以同时是实例和构造函数吗?
这只是一个有趣的技巧,可以利用语言的自由来看看它是否有可能,还有其他方法吗?
解决方案
JavaScript 实例本身可以是构造函数并拥有自己的一组实例吗?
当然,一个函数是一个实例,Function
一个构造函数是一个函数。
所以你可以有
const instance1 = new Function("a", "this.a = a;");
const instance2 = new instance1("foo");
console.log(instance2.a); // "foo"
如果您需要instance1
的不仅仅是一个原始函数,您甚至可以扩展这个构造函数:
class MyFunc extends Function {
doSomethingMore(){ console.log("I'm doing more"); }
}
const instance1 = new MyFunc("a", "this.a = a;");
instance1.doSomethingMore();
const instance2 = new instance1("foo");
console.log(instance2.a); // "foo"
但我看不出你想要这样做的明确原因......
(请注意,通过Function
构造函数动态创建函数通常不如通过函数表达式或语句在解析时“执行”。)
推荐阅读
- python-3.x - Keras-tensorflow 中二维卷积回归的恒定输出
- ios - 如何初始化 CMAtitude
- html - 如何在不裁剪内联图像/文本的情况下隐藏元素溢出?
- laravel - 无法使用外键添加新列
- python - 如何使用 html 层次结构在 bs4 中导航
- visual-studio-code - 如何在 VSCode 中禁用 HTML 自动完成功能?
- javascript - React.js 模态不显示语义 Ui
- python - 在 Selenium 中关闭或禁用离开站点警报
- java - 这行代码是什么意思....new URLClassLoader(new URL[0],getClass().getClassLoader());
- javascript - localStorage 值不会自动更新