我很好奇new关键字除了改变this范围所指的内容之外还在后台做了什么.
例如,如果我们使用new关键字比较来使对象上的函数集属性和方法只是使函数返回一个新对象,那么新对象有什么额外的作用吗?
如果我不希望从函数构造函数创建多个对象,那么这是首选
var foo2 = function () {
var temp = "test";
return {
getLol: function () {
return temp;
},
setLol: function(value) {
temp = value;
}
};
}();
var foo = new function () {
var temp = "test";
this.getLol = function () {
return temp;
}
this.setLol = function(value) {
temp = value;
}
}();
Run Code Online (Sandbox Code Playgroud)
firebug探测器告诉我使用new关键字稍微快一点(2ms而不是3ms),对大型对象来说新的仍然明显更快?
[编辑]
另一个问题是真正大的对象构造函数在函数的底部有一个返回(它将具有大量的本地函数)或者有一些this.bar = ...在函数的顶部更具可读性?什么被认为是一个好的约定?
var MAIN = newfunction() {
this.bar = ...
// Lots …Run Code Online (Sandbox Code Playgroud) 我一直在尝试解决node.js中其他js文件的包含问题.
我已经阅读了有关require函数和其他替代方法的所有内容,并决定使用require函数(因为代码只会在node.js上使用,而不是在浏览器中使用).
在我的代码中,我使用原型来创建一个'对象',我后来希望创建一个实例.
为了让它工作,我一直在编写如下代码(让我们称之为vehicle.js):
var util = require('util');
var EventEmitter = require('events').EventEmitter;
module.exports = Vehicle;
util.inherits(Vehicle, EventEmitter);
function Vehicle(options) {
EventEmitter.call(this);
options = options || {};
...
}
Vehicle.prototype._doStartEvent = function(data) {
this.emit('start', data);
};
Vehicle.prototype.testRun = function() {
this._doStartEvent();
};
Run Code Online (Sandbox Code Playgroud)
然后在我的主要js(让我们称之为server.js),我有以下内容:
var test = exports;
exports.Vehicle = require('./vehicle.js');
var remoteVehicle = new test.Vehicle({address: "192.168.1.3"});
remoteVehicle.on('start', function(d) {console.log('started');});
remoteVehicle.testRun();
Run Code Online (Sandbox Code Playgroud)
现在一切正常,但我对正在发生的事情并不了解.
我主要关注的是使用var test = exports;然后exports.Vehicle = require(...).
我尝试过做这样的事情var vehicle = require(...).Vehicle,并var vehicle = require(...) …