this在对象原型中存储的事件处理程序中保留javascript引用的正确方法是什么?我想远离创建像'_this'或'that'这样的临时变量,我不能使用像jQuery这样的框架.我看到很多人谈论使用'绑定'功能但不确定如何在我给定的场景中实现它.
var Example = function(foo,bar){
this.foo = foo;
this.bar = bar;
};
Example.prototype.SetEvent = function(){
this.bar.onclick = this.ClickEvent;
};
Example.prototype.ClickEvent = function(){
console.log(this.foo); // logs undefined because 'this' is really 'this.bar'
};
Run Code Online (Sandbox Code Playgroud) 根据我对内存泄漏的理解,在闭包内引用超出范围的var会导致内存泄漏.
但是,创建"that"var也是一种常见做法,以保留"this"引用并在闭包中使用它,尤其是对于事件.
那么,做这样的事情有什么用呢:
SomeObject.prototype.createImage = function(){
var that = this,
someImage = new Image();
someImage.src = 'someImage.png';
someImage.onload = function(){
that.callbackImage(this);
}
};
Run Code Online (Sandbox Code Playgroud)
这不会给项目增加一点泄漏吗?
有没有办法按属性值为null或空字符串过滤命中?
即,向我展示所有没有作者的对象
facetFilters =作者:null
facetFilters =作者: ''
或者将其包含在OR值列表中?
即,向我展示作者设置为吐温或没有作者的所有对象
facetFilters =(作者:吐温,作者:null)
facetFilters =(作者:吐温,作者: '')
我是 MongoDB 的新手,一直在研究模式设计和索引。我知道您可以对属性进行索引,而不管其值(ID、数组、子文档等)如何,但我不知道对字符串数组或嵌套对象的键进行索引是否有性能优势。
这是我正在考虑的两种场景的示例(在 Mongoose 中):
// schema
mongoose.Schema({
visibility: {
usa: Boolean,
europe: Boolean,
other: Boolean
}
});
// query
Model.find({"visibility.usa": true});
Run Code Online (Sandbox Code Playgroud)
或者
// schema
mongoose.Schema({
visibility: [String] // strings could be "usa", "europe", and/or "other"
});
// query
Model.find({visibility: "usa"});
Run Code Online (Sandbox Code Playgroud)
文档可以具有一种、两种或全部三种可见性选项。
此外,如果我采用布尔对象设计,我可以简单地索引可见性字段,还是需要在美国、欧洲和其他国家建立索引?
我知道如果实施得当,索引可以成为快速检索数据的宝贵工具。我希望能够扫描我的文档以查找某个字段值或字段值的组合。
我将索引两个字段(类别、标签)。类别是一个字符串,标签是一个数组。我需要能够查询特定类别中的项目和/或包含特定标签的项目。
下面是三个例子:
两个字段的模式级别索引是否足以满足所有三种情况?
docSchema.index({category:1, tags:1});
Run Code Online (Sandbox Code Playgroud)
或者我是否还需要在字段级别定义它们,以支持我只搜索单个字段时的场景?
docSchema = mongoose.Schema({
category: {
type: String,
index: true
},
tags: {
type: [String],
index: true
}
});
Run Code Online (Sandbox Code Playgroud) 我想知道在循环之外放置在循环中引用的任何变量是否更有效 - 或者它们是否可以像函数中的变量一样收集垃圾?
var obj = {key:'val'};
for(var i=0; i<10; i++){
console.log(obj);
}
Run Code Online (Sandbox Code Playgroud)
要么
for(var i=0; i<10; i++){
var obj = {key:'val'};
console.log(obj);
}
Run Code Online (Sandbox Code Playgroud)
我试图在我的浏览器的分析器中运行一些内存测试,但仍然无法分辨哪种方法更好.
javascript ×3
mongodb ×2
mongoose ×2
performance ×2
this ×2
algolia ×1
events ×1
facet ×1
indexing ×1
memory-leaks ×1
oop ×1
schema ×1