Javascript,一种简单的扩展方法,允许扩展对象的多个版本
我有一个简单的“扩展”方法,设置如下:Javascript,一种简单的扩展方法,允许扩展对象的多个版本,javascript,extend,Javascript,Extend,我有一个简单的“扩展”方法,设置如下: extend: function(source) { for (var k in source) { if (source.hasOwnProperty(k)) { myThing[k] = source[k]; } } return myThing; } 你用它就像 myThing.extend({ newObj: { myFunc: funct
extend: function(source) {
for (var k in source) {
if (source.hasOwnProperty(k)) {
myThing[k] = source[k];
}
}
return myThing;
}
你用它就像
myThing.extend({
newObj: {
myFunc: function () { console.log('things'); }
}
});
而且效果很好。但是,我想在以后添加一些其他代码调用的功能:
myThing.extend({
newObj: {
mySecondFunc: function () { console.log('things'); }
}
});
我应该能够调用myThing.newObj.myFunc()和myThing.newObj.mySecondFunc()
我尝试将其更改为:
for (var k in source) {
if (source.hasOwnProperty(k)) {
if (mtUtils.hasOwnProperty(k)) {
for (var t in k) {
mtUtils[k][t] = source[k][t];
}
} else {
mtUtils[k] = source[k];
}
}
}
但是这似乎不起作用。这应该可以解决您的问题,但是为什么不实现一个递归版本的
extend
for (var k in source) {
if (source.hasOwnProperty(k)) {
if (mtUtils.hasOwnProperty(k)) {
for (var t in source[k]) {
mtUtils[k][t] = source[k][t];
}
} else {
mtUtils[k] = source[k];
}
}
}
我建议大家看看Douglas Crockford实现的不同模式@阿龙库尔兹:哪一部分?你刚刚把我发到了整个网站。我建议@AaronKurtzhals:我不是在寻找对象继承。这不正是我发布的我尝试过但没有成功的东西吗?它本应该工作的,但没有,所以我可能只是需要清除缓存或其他什么。不管怎样,我已经实现了一个递归版本,就像你建议的那样。@JamesP.Wright我相信你在你的代码中拼错了(var t in source[k]){,我已经纠正了。所以这不完全是你发布的。
function extend(dest, source) {
for (var k in source) {
if (source.hasOwnProperty(k)) {
var value = source[k];
if (dest.hasOwnProperty(k) && typeof dest[k] === "object" && typeof value === "object") {
extend(dest[k], value);
} else {
dest[k] = value;
}
}
}
return dest;
}
var myThing = {};
extend(myThing, {
newObj: {
myFunc: function() {
console.log('things');
}
}
});
extend(myThing, {
newObj: {
mySecondFunc: function() {
console.log('things');
}
}
});
myThing;
/*
Object
newObj: Object
myFunc: function () { console.log('things'); }
mySecondFunc: function () { console.log('things'); }
__proto__: Object
__proto__: Object
*/