那两个有什么区别?

时间:2012-05-31 17:57:42

标签: javascript

这两者之间有什么区别:

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

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

6 个答案:

答案 0 :(得分:4)

第一个代码段接受this对象,无论它是什么,并为其名为method1的插槽(字段)分配一个函数。 this可以表示不同的对象,具体取决于test1的调用方式:

  • 作为独立功能调用时,test1() - this将为window
  • 作为构造函数调用时 - new test1() - this引用正在创建的对象
  • 通过callapply调用时,test1.apply(someObject) - this引用参数

第二个代码段获取对象test2,并将一个函数分配给名为method1的插槽。

答案 1 :(得分:1)

第一种方法是构造函数,它可以创建更多对象并需要new个关键字:

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

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

test2.method1();

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

第一个:

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

}

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

第二个:

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

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

答案 5 :(得分:0)

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

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