Javascript - 每个函数都是一个对象?

时间:2015-07-02 13:10:01

标签: javascript function object

在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())

这是否意味着只有函数的实例才是对象?不是功能?

3 个答案:

答案 0 :(得分:2)

它们不是您正在弄乱新关键字的功能实例,新关键字会做很多事情:

  • 创建了一个全新的对象
  • 新对象是[[prototype]] - 链接
  • 新对象设置为函数调用的“this”绑定
  • 除非函数返回新调用的调用自己的对象 函数将返回新对象

在第一个示例中,您将从函数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关键字创建实例或对象。