实现以下目标的最佳设计模式是什么(不起作用)?
var obj = (function() {
// code defining private variables and methods
var _obj = {
property: value,
method1: function() {
// do stuff
},
method2: function() {
// use property
var prop = _obj.property; // obviously doesn't work
// call method1
obj.method1(); // "obj" not finished being defined yet!
}
};
// obviously now I could do...
var prop = _obj.property;
return _obj;
})();
// and I could now do...
obj.method1();
Run Code Online (Sandbox Code Playgroud)
我认为应该有的变化是
var obj = (function() {
var …Run Code Online (Sandbox Code Playgroud) 如果我想要一个固定大小为N的数组,以便缓存最近的N个项目,那么一旦达到限制N,我将不得不在添加最新项目时删除最旧的项目.
注意:我不关心最新项目是否在数组的开头或结尾,只要项目按添加顺序删除即可.
显而易见的方法是:
push()和shift()(所以cache[0]包含最旧的项目),或unshift()和pop()(所以cache[0]包含最新的项目)基本理念:
var cache = [], limit = 10000;
function cacheItem( item ) {
// In case we want to do anything with the oldest item
// before it's gone forever.
var oldest = [];
cache.push( item );
// Use WHILE and >= instead of just IF in case the cache
// was altered by more than one …Run Code Online (Sandbox Code Playgroud) 我有一个对象具有用于简单编码/解码的替换值对(不是为了安全,只是为了方便;太复杂,无法在此解释).它在形式中
var obj = {x: y,
x: y,
...
};
Run Code Online (Sandbox Code Playgroud)
其中'x'是编码时的值,'y'是解码值.
解码很简单:我循环遍历字符串的字符,并charAt(i)通过括号查找对象中的值:obj[ str.charAt(i) ].(我将检查是否需要大写或小写版本(对象中的所有键/值都是小写),但这很简单.)
要进行编码,我当然必须在对象中查找值,而不是属性.目前,我使用循环遍历属性for ... in ...并根据值检查charAt(i)值.我目前的代码是:
var i, j,
output = '',
str = 'Hello World!',
obj = {'s':'d',
'm':'e',
'e':'h',
'x':'l',
'z':'o',
'i':'r',
'a':'w',
'o':'!',
'-':' '};
for (i = 0; i < str.length; i++) {
for (j in obj) {
if (Object.prototype.hasOwnProperty.call(obj, j) &&
Object.prototype.propertyIsEnumerable.call(obj, j)) {
if (obj[j] === str.charAt(i)) {
output += j;
break;
} else …Run Code Online (Sandbox Code Playgroud)