0

它来自 Douglas Crockfords 的 JavaScript 书籍。

if (typeof Object.create !== 'function')
{
  object.create = function(o) {
          var F = function () {}; 
          F.prototype = o; 
          return new F();
  }
};

我的问题是这条线有什么作用?

typeof Object.create !== 'function'

谢谢你。

4

2 回答 2

0

这是一个比较, typeof 评估该值是否为给定类型(字符串、整数、函数),因此该行询问 Object.create (这是一个函数)是否不等于一个函数。

这里的情况是 Object.create 它确实是一个函数,因此除非您将 Object.craete 更改为其他内容,否则条件永远不会成立。

于 2018-11-08T18:32:46.747 回答
0

new function(){}返回一个对象,默认情况下Object.create返回一个函数。

为什么这条线可能不起作用的原因仅仅是因为 Douglas Crockford 的书是在 2008 年印刷的,当时并不能保证跨平台的兼容性,为什么需要这个特定条件才能确保访问时Object.create按预期工作.

console.log(typeof Object.create)
console.log(typeof new function(){})

console.log(Object.create instanceof Object)
console.log(new function(){} instanceof Object)

console.log(Object.create instanceof Function)
console.log(new function(){} instanceof Function)

于 2018-11-08T18:29:22.277 回答