这两者有什么区别吗:
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
将是window
new 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 属性