5

这两者有什么区别吗:

var test1 = function () {
    this.method1 = function() {}
}

var test2 = function() {};
test2.method1 = function() {};
4

6 回答 6

4

第一个片段接受this对象,无论它是什么,并将一个函数分配给它的名为 的槽(字段)method1this可以表示不同的对象,具体取决于如何test1调用:

  • 当作为独立函数调用时 -- test1()--this将是window
  • 当作为构造函数调用时 -- new test1()--this指的是正在创建的对象
  • 调用时 viacallapply-- test1.apply(someObject)-- this指的是参数

第二个片段获取对象test2并将一个函数分配给其名为 的槽method1

于 2012-05-31T18:09:22.197 回答
1

第一种方式是创建更多对象的构造函数,需要有new关键字:

var mytest1 = new test1();
mytest1.method1();

第二种方法可以立即使用:

test2.method1();
于 2012-05-31T18:03:21.783 回答
0

假设语法是正确的,第一个是一个构造函数,它提供了通过new test1()名为 method1 的方法创建的所有 test1 对象。第二个只是向构造函数对象添加一个函数。在 javascript 中,函数是可以具有属性(包括方法)的对象。

于 2012-05-31T18:03:30.853 回答
0

第一个版本实际上创建了一个可用于所有实例化对象的方法,如下所示:

var o = new test1();
o.test1();

第二个简单地将函数作为属性附加到 test2 函数上。如果您熟悉其他基于类的 OO 语言,这有点像静态方法。您将无法访问this第二个示例中的指针。

于 2012-05-31T18:04:12.887 回答
0

第一个:

var test1 = function () {
    this.method1 = function() {}

}

定义函数“test1”。一旦(并且仅当)“test1”被调用,“this.method1”将被定义为一个函数,它什么都不做。

第二:

var test2 = function() {};
test2.method1 = function() {};

创建函数“test2”,同时定义函数“test2.method1”,不需要调用第一个函数。

于 2012-05-31T18:05:28.090 回答
0

第一个在调用 test1() 的任何东西上设置 method1 属性。

第二个定义了一个空函数,并在 test2 上设置了 method1 属性

于 2012-05-31T18:05:43.933 回答