-
Notifications
You must be signed in to change notification settings - Fork 892
Open
Description
function f(){
return f;
}
console.log(new f() instanceof f);
// 写出执行结果,并解释原因
每日一题会在下午四点在交流群集中讨论,五点小程序中更新答案
欢迎大家在下方发表自己的优质见解
二维码加载失败可点击 小程序二维码
Activity
Genzhen commentedon Jun 22, 2020
答案
false
解析
a instanceof b 用于检测a是不是b的实例。如果题目f中没有return f,则答案明显为true;而在本题中new f()其返回的结果为f的函数对象,其并不是f的一个实例。
jojo1900 commentedon Jan 29, 2021
new f() 返回的是 f 这个函数对象。
而 o instanceOf O的实现原理是,检测o的原型链上有没有O.prototype 即 o.proto == O.prototype || o.proto.proto == O.prototype。调试可以看出,两者并不相同。
Alfred-kai commentedon Mar 2, 2021
instanceOf的实现原理原来是这样
liuyuan22 commentedon Mar 17, 2021
如果函数返回值是Object类型,那么new操作符会返回这个Object类型的值。如果返回值不是Object类型(不写return就是返回undefined),那么new操作符会返回该函数的一个实例
zengxiaoluan commentedon Apr 8, 2021
先来看下
new
关键字做了什么:上面的函数
mockNew
模拟了new
关键字创建一个实例的过程。首先拿到传入参数的构造函数,创建了一个命名为o
的对象;执行构造函数Con
,将其this
绑定为o
;最关键的在于,会检测构造函数返回的结果是不是Object
对象的实例,如果是的话会返回构造函数的执行结果,否则返回创建的o
。再来看下
instanceof
操作符做了什么:上面的函数表明了
instanceof
的原理,沿着原型链一层一层往上找,直到原型匹配或者原型为null
为止。配合题目来理解:
zengxiaoluan commentedon Apr 22, 2021
如何把 URL 里的 queryString 转化成一个对象?如
?a=b&c=1
,转成{ a: 'b', c: 1 }
,我们来介绍 2 种方式。第一种使用正则:
第二种使用原生的
api URL