فهرست منبع

mixin({} ,x, x) did not clear x, but was meant to

Now slightly changed mixin does it with mixin(null, x, x) call.
Herbert Vojčík 11 سال پیش
والد
کامیت
8a50b5a56c
1فایلهای تغییر یافته به همراه7 افزوده شده و 5 حذف شده
  1. 7 5
      brikz.js

+ 7 - 5
brikz.js

@@ -5,8 +5,10 @@ function Brikz(api, apiKey, initKey) {
 
 
 	function mixin(src, target, what) {
 	function mixin(src, target, what) {
 		for (var keys = Object.keys(what||src), l=keys.length, i=0; i<l; ++i) {
 		for (var keys = Object.keys(what||src), l=keys.length, i=0; i<l; ++i) {
-			var value = src[keys[i]];
-			if (typeof value !== "undefined") { target[keys[i]] = value; }
+			if (src == null) { target[keys[i]] = undefined; } else {
+				var value = src[keys[i]];
+				if (typeof value !== "undefined") { target[keys[i]] = value; }
+			}
 		}
 		}
 		return target;
 		return target;
 	}
 	}
@@ -17,13 +19,13 @@ function Brikz(api, apiKey, initKey) {
 
 
 	this.rebuild = function () {
 	this.rebuild = function () {
 		Object.keys(backup).forEach(function (key) {
 		Object.keys(backup).forEach(function (key) {
-			mixin({}, api, (backup[key]||0)[apiKey]);
+			mixin(null, api, (backup[key]||0)[apiKey]||{});
 		});
 		});
 		var oapi = mixin(api, {}), order = [], chk = {};
 		var oapi = mixin(api, {}), order = [], chk = {};
 		brikz.ensure = function(key) {
 		brikz.ensure = function(key) {
 			if (key in exclude) { return null; }
 			if (key in exclude) { return null; }
 			var b = brikz[key], bak = backup[key];
 			var b = brikz[key], bak = backup[key];
-			mixin({}, api, api);
+			mixin(null, api, api);
 			while (typeof b === "function") { b = new b(brikz, api, bak); }
 			while (typeof b === "function") { b = new b(brikz, api, bak); }
 			if (b && !chk[key]) { chk[key]=true; order.push(b); }
 			if (b && !chk[key]) { chk[key]=true; order.push(b); }
 			if (b && !b[apiKey]) { b[apiKey] = mixin(api, {}); }
 			if (b && !b[apiKey]) { b[apiKey] = mixin(api, {}); }
@@ -31,7 +33,7 @@ function Brikz(api, apiKey, initKey) {
 		};
 		};
 		Object.keys(brikz).forEach(function (key) { brikz.ensure(key); });
 		Object.keys(brikz).forEach(function (key) { brikz.ensure(key); });
 		brikz.ensure = null;
 		brikz.ensure = null;
-		mixin(oapi, mixin({}, api, api));
+		mixin(oapi, mixin(null, api, api));
 		order.forEach(function(brik) { mixin(brik[apiKey] || {}, api); });
 		order.forEach(function(brik) { mixin(brik[apiKey] || {}, api); });
 		order.forEach(function(brik) { brik[initKey] && brik[initKey](); });
 		order.forEach(function(brik) { brik[initKey] && brik[initKey](); });
 		backup = mixin(brikz, {});
 		backup = mixin(brikz, {});