这两者有什么区别吗:
var test1 = function () {
this.method1 = function() {}
}
和
var test2 = function() {};
test2.method1 = function() {};
这两者有什么区别吗:
var test1 = function () {
this.method1 = function() {}
}
和
var test2 = function() {};
test2.method1 = function() {};
第一个片段接受this对象,无论它是什么,并将一个函数分配给它的名为 的槽(字段)method1。this可以表示不同的对象,具体取决于如何test1调用:
test1()--this将是windownew test1()--this指的是正在创建的对象call或apply-- test1.apply(someObject)-- this指的是参数第二个片段获取对象test2并将一个函数分配给其名为 的槽method1。
第一种方式是创建更多对象的构造函数,需要有new关键字:
var mytest1 = new test1();
mytest1.method1();
第二种方法可以立即使用:
test2.method1();
假设语法是正确的,第一个是一个构造函数,它提供了通过new test1()名为 method1 的方法创建的所有 test1 对象。第二个只是向构造函数对象添加一个函数。在 javascript 中,函数是可以具有属性(包括方法)的对象。
第一个版本实际上创建了一个可用于所有实例化对象的方法,如下所示:
var o = new test1();
o.test1();
第二个简单地将函数作为属性附加到 test2 函数上。如果您熟悉其他基于类的 OO 语言,这有点像静态方法。您将无法访问this第二个示例中的指针。
第一个:
var test1 = function () {
this.method1 = function() {}
}
定义函数“test1”。一旦(并且仅当)“test1”被调用,“this.method1”将被定义为一个函数,它什么都不做。
第二:
var test2 = function() {};
test2.method1 = function() {};
创建函数“test2”,同时定义函数“test2.method1”,不需要调用第一个函数。
第一个在调用 test1() 的任何东西上设置 method1 属性。
第二个定义了一个空函数,并在 test2 上设置了 method1 属性