JavaScript&&对象创建中的表示法

时间:2015-03-04 15:48:26

标签: javascript object inheritance

我的问题在于以下表达式:

var prototype = Object.create(extend && extend.prototype);

我认为它创建了继承extend对象的原型对象。并且extend && extend.prototype正在检查是否存在extend并且extend.prototype存在。如果任何一个都不存在,那么prototype将是一个没有超类的对象。如果两者都存在,原型会继承延伸吗?如何将extend.prototypeextend && extend.prototype语法结合使用?

如果var prototype = Object.create(extend && extend.prototype)var prototype = Object.create(extend.prototype)都在那里,那么extendextend.prototype是一样的吗?

感谢。

1 个答案:

答案 0 :(得分:2)

关键是在JavaScript中,与其他C-heritage语言不同,&&运算符不一定(必然)具有布尔结果。 &&操作的值是第一个" falsy"的值。表达式,或者是最后一个表达式的值。它所做的测试是在子表达式的强制布尔值上执行的,但结果值是最后一个要评估的子表达式的原始值。

这在

的评估中
extend && extend.prototype

结果值将是子表达式extend或子表达式extend.prototype的值。如果extendnullundefined或其他任何"虚假"值,那么该值将是整体结果。否则,该值将是extend.prototype的值。

请注意,如果extend是一个简单的对象,特别是没有名为prototype的属性的对象,则整体值可能仍为undefined。很明显,问题中代码的意图是选择传入构造函数的原型引用,但它不是"防弹"代码。