在观看 Douglas Crockford 关于高级 JavaScript 的讲座时,他提出了寄生继承的想法,它本质上是让构造函数调用其他构造函数来修改相关对象。这是他的代码:
function gizmo(id, secret) {
secret = secret || {};
secret.id = id;
return {
toString: function () {
return "gizmo " + secret.id;
}
};
}
function hoozit(id) {
var secret = {},
that = gizmo(id, secret);
that.test = function (testid) {
return testid === secret.id;
};
return that;
}
var myHoozit = hoozit(20);
console.log(myHoozit.test(20)); //returns true
我理解代码,这里没有什么太难掌握的地方。混乱发生在hoozit
函数中。如果你不设置secret = {}
,你将不会得到 atrue
被返回。
这令人费解,因为在gizmo
函数中,您会看到secret = secret || {}
哪个应该为我们处理这个问题……但事实并非如此。
secret = secret || {}
为什么没有在gizmo
函数中传递第二个参数hoozit
(Chrome和Firefox中的中断)时,函数中的短路不能正常工作( )?