我很好奇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) 我试图理解为什么line-heightCSS属性将文本垂直放在此按钮的中间:
.btn-order {
width: 220px;
height: 58px;
font-size: 24px;
padding: 0;
text-align: center;
vertical-align: middle;
line-height: 58px;
border: 1px solid black;
}Run Code Online (Sandbox Code Playgroud)
<div class="btn-order">Complete Order</div>Run Code Online (Sandbox Code Playgroud)
在Node.js中,我使用websockets/ws进行WebSocket连接.以下是客户端的代码.假设我们连接的服务器套接字停机了一分钟.close事件将触发,但是每当服务器上的套接字出现故障或错误时,重新连接到套接字的最佳方法是什么?
var ws = new WebSocket('ws://localhost');
ws.on('open', function() {
console.log('socket open');
});
ws.on('error', function() {
console.log('socket error');
// how do I reconnect to the ws after x minutes here?
});
ws.on('close', function() {
console.log('socket close');
// how do I reconnect to the ws after x minutes here?
});
Run Code Online (Sandbox Code Playgroud) 在谷歌地图中,我希望能够在我放大或缩小时将地图的中心保留在我所在位置的标记上.这是Ingress所做的事情,无论你双击(或双击)或捏合的地方,地图都会在你的标记上居中.所以有可能......
我现在想出的最好的是:
google.maps.event.addListener(mymap, 'zoom_changed', function() {
mymap.setCenter({lat: myLoc.lat, lng: myLoc.lon});
})
Run Code Online (Sandbox Code Playgroud)
但它远非完美,它只是在用户已经缩放后重新定位地图...
非常感谢 !
[编辑]绝对没有任何帮助API参考...或其他地方我是盲目的,错过了它!
使用超时实现函数调用
我已经看到许多资源提供Promise.race了在给定时间段内使用超时函数调用的类似示例.这是如何Promise.race在实践中使用的一个很好的例子.这是一些示例代码:
function doWithinInterval(func, timeout) {
var promiseTimeout = new Promise(function (fulfill, reject) {
// Rejects as soon as the timeout kicks in
setTimeout(reject, timeout);
});
var promiseFunc = new Promise(function (fulfill, reject) {
var result = func(); // Function that may take long to finish
// Fulfills when the given function finishes
fulfill(result);
});
return Promise.race([promiseTimeout, promiseFunc]);
}
Run Code Online (Sandbox Code Playgroud)
上面使用的简单方法Promise.race一旦超时func完成就会拒绝承诺.否则,一旦func函数在超时间隔之前完成,项目就会完成.
这听起来不错,易于使用.
但是,这是在Promise中使用超时的最佳做法吗?
当然,如果我们想使用Promises为函数调用设置超时,可以使用上面的方法.这些行动似乎仍然是一个很好的承诺.但是,这被认为是在Promise中使用超时的好方法吗?如果没有,使用它的缺点是什么?
我正在寻找替代方法,但找不到本机的Promise方法来做到这一点.
相反,一些外部Promise库提供timeout如下功能:
蓝鸟供应.timeout() …
我有一个生成器,在其他操作中,查询数据库,如
function* current(db) {
const items = await db.collection('...').find({ ... });
for (const item of items)
if (...) yield item;
}
Run Code Online (Sandbox Code Playgroud)
这是无效的语法.使用承诺和屈服于a then也是不可能的.
那我该怎么办?如何在生成器中使用异步操作?
如何以便携方式获得当前用户?
这看起来像是常见问题,但是perlport并没有谈到它,也许是因为一些奇怪的系统没有"用户"的概念?但是,让我们坚持使用*nix和Windows.
getpwuid($>) 没有在Windows上实现.
$ENV{USER} || $ENV{USERNAME} 看起来很挑剔.
http://search.cpan.org没有发现太多.
我将要编写一个Web应用程序,它应该可以从Web和本机移动设备应用程序访问CRUD.对于后者,我肯定致力于REST API.有可能通过Meteor.com意识到这一点吗?将Meteor用于网络和第二个REST接口直接与mongo通信是一种选择吗?由于流星客户端侦听mongodb的变化,这不应该引起冲突,是吗?
javascript ×4
ecmascript-6 ×2
async-await ×1
asynchronous ×1
css ×1
delete-row ×1
es6-promise ×1
generator ×1
google-maps ×1
html ×1
influxdb ×1
jestjs ×1
meteor ×1
new-operator ×1
node.js ×1
object ×1
oop ×1
perl ×1
portability ×1
promise ×1
prototype ×1
rest ×1
testing ×1
unit-testing ×1
websocket ×1