var createworker = function() {
var workcount;
var input;
(function() {
workcount = 0;
console.log("hello");
}());
var task1 = function() {
workcount += 1;
console.log("task1" + workcount);
};
var task2 = function(a) {
workcount += 1;
input = a;
console.log("task2" + workcount + "variable" + a);
};
var task3 = function() {
console.log(input);
};
return {
job1: task1,
job2: task2,
job3: task3
};
}
var worker = new createworker();
worker.job1();
worker.job2(2);
worker.job3();
var worker1 = createworker();
worker1.job1();
worker1.job2(2);
worker1.job3();
两者都一样。那为什么要使用new以及何时使用它?
答案 0 :(得分:2)
两者都相同。
他们认为他们的工作方式相同,就是你要从createworker
返回一个对象。这会覆盖new
所做的工作。
new
与构造函数一起使用。它这样做:
prototype
属性指向this
调用构造函数new functionname
的结果是对new
创建的对象的引用。 但是,如果构造函数返回非null
对象引用,则new
表达式的结果是该对象而不是。就是在你的createworker
示例中发生的“但是”。因此,createworker
的版本不需要new
,因为它的编写方式。
这样做是绝对正确的;事实上,有些人总是这样做。如果您想将new
与createworker
一起使用,那么这是一个设计用于这种方式的版本(重命名为CreateWorker
,因为按照惯例,构造函数是大写的):
var CreateWorker = function() {
var workcount;
var input;
(function() { // Side note: This function is pointless. Just move
workcount = 0; // <− this line
console.log("hello"); // <− and this one
}()); // ...out into the body of `createworker`/`CreateWorker`
// Note we assign to properties on `this`
this.job1 = function() {
workcount += 1;
console.log("task1" + workcount);
};
this.job2 = function(a) {
workcount += 1;
input = a;
console.log("task2" + workcount + "variable" + a);
};
this.job3 = function() {
console.log(input);
};
// Note we aren't returning anything
};