我stumbled upon以下代码:
obj = {}; // global object
function set(path, value) {
var schema = obj; // a moving reference to internal objects within obj
var pList = path.split('.');
var len = pList.length;
for(var i = 0; i < len-1; i++) {
var elem = pList[i];
if( !schema[elem] ) schema[elem] = {}
schema = schema[elem];
}
schema[pList[len-1]] = value;
}
set('mongo.db.user', 'root');
我进一步阅读了一下,发现schema
充当obj
的指针。这是如何运作的?我什至重写了上面的代码以合并ES6:
console.log(set('mongo.db.user', 'root'));
function set(path, data = '', obj = {}, delim = '.') {
if (path) {;
path.split(delim).reduce((s, n, i, a) => {
s.pointer[n] = s.pointer[n] || i === a.length - 1 ? data : {};
s.pointer = s.pointer[n];
return s;
}, {pointer: obj});
}
return obj;
}
但是我对此感到难以接受,因为我看不到例如pointer
是obj
怎么设置s.pointer[n]
来设置对象,但是{ {1}}未设置/覆盖s.pointer = s.pointer[n]
?
如果有人可以解释一下那将是很棒的-如果我从更大的角度上缺少某些东西(因此也没问),请告诉我。