我创建了自己的new
函数。
function Person(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
Person.prototype.getName = function() {
console.log(this.firstName + " " + this.lastName)
}
function spawn(constructor) {
var obj = {}
Object.setPrototypeOf(obj, constructor.prototype)
var myArray = Array.prototype.slice.apply(arguments)
return constructor.apply(obj, myArray.slice(1)) || obj
}
var crockford = spawn(Person, "Douglas", "Crockford")
crockford.getName();
我对逻辑运算符||的操作感到困惑。
constructor.apply(obj, myArray.slice(1)) || obj
它接缝javascript引擎首先执行代码的左侧,即使它是假的(意味着应用函数在返回obj之前应用于构造函数)然后返回||的右侧运营商。我对吗?请考虑以下代码,
var app = constructor.apply(obj, myArray.slice(1))
return app || obj
在这种情况下,constructor.apply(obj, myArray.slice(1))
已经应用于构造函数。它不依赖于逻辑运算符的返回值。
我只想要澄清做||运算符在返回之前执行函数的两侧,或者只选择一个而另一个甚至不执行..我认为它执行constructor.apply(obj, myArray.slice(1))
为什么我得到的结果 Douglas Crockford
答案 0 :(得分:0)
'&&'的右侧。和' ||'逻辑运算符只有在左侧是“假”的情况下才会被评估和返回。和' truthy'分别
将始终评估左侧。
答案 1 :(得分:0)
如果您要检查A operator B == true
:
- 在逻辑OR
的情况下,仅当第一个操作数求值为false(0)时才计算第二个操作数
- 在AND
的情况下,仅当第一个操作数的计算结果为真(1)时才计算第二个操作数。
答案 2 :(得分:0)
||
和&&
运算符都会检查
如果结果足以猜测整个结果,则只有LHS(即true
时为||
,false
时为&&
。< / p>
检查LHS和RHS。 (如果||
的LHS为false
或&&
的LHS为true
,则它还会检查RHS。