在 Javascript 中,每个函数都是一个对象。
function a() {
this.x = function() { console.log("x"); }
}
这里的“a”是一个函数,它是一个对象。对吧?
var b = Object.create(a);
b.x(); //does not work!!
如果我们这样写,上面的代码就可以工作了——
var b = Object.create(new a())
那么这是否意味着只有函数的实例才是对象?不是函数?
最佳答案
它们不是您正在使用 new 关键字的函数实例,new 关键字可以做很多事情:
- 创建了一个全新的对象
- 新对象是[[prototype]]-linked
- 新对象被设置为函数调用的“this”绑定(bind)
- 除非函数返回它自己的对象,否则新调用的调用 函数将返回新对象
在您的第一个示例中,您从没有任何 x 属性的函数 a 创建了一个对象。
在最后你创建了新的 a() 调用返回的对象的对象,它有一个 x 属性,因为它是在 a 函数的执行中赋值的
关于Javascript - 每个函数都是一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31185577/