这两者之间有什么区别:
var test1 = function () {
this.method1 = function() {}
}
和
var test2 = function() {};
test2.method1 = function() {};
答案 0 :(得分:4)
第一个代码段接受this
对象,无论它是什么,并为其名为method1
的插槽(字段)分配一个函数。 this
可以表示不同的对象,具体取决于test1
的调用方式:
test1()
- this
将为window
new test1()
- this
引用正在创建的对象call
或apply
调用时,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属性