在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())
这是否意味着只有函数的实例才是对象?不是功能?
答案 0 :(得分:2)
它们不是您正在弄乱新关键字的功能实例,新关键字会做很多事情:
在第一个示例中,您将从函数a创建一个没有任何x属性的对象。
在最后一个你创建和新的a()调用返回的对象的对象,它具有x属性,因为它在执行函数时被赋值
答案 1 :(得分:1)
this
取决于您使用a
功能的方式。如果不将其作为构造函数函数运行(不使用new
关键字),this
指向外部作用域。试试这个:
function a() {
this.x = function() { console.log("x"); }
}
a();
console.log(window.x());
另一方面,当您编写new a()
时,将其作为构造函数运行,在这种情况下,this
指向新创建的对象的实例。现在尝试这个例子:
function a() {
this.x = function() { console.log("x"); }
}
var b = new a(); // mind the "new" keyword here
console.log(b.x());
console.log(window.x);
作为最简单的证明,每个函数都是一个对象:
function c() {};
c instanceof Object; // ;-)
答案 2 :(得分:1)
function a() {
this.x = function() { console.log("x"); }
}
var b = new a();
b.x();
一个函数就像一个class
。您可以使用new
关键字创建实例或对象。