【问题标题】:What's the difference Object.call() and Object.__proto__.call()?Object.call() 和 Object.__proto__.call() 有什么区别?
【发布时间】:2019-12-10 04:36:52
【问题描述】:

对象没有自己的方法调用,所以从proto中获取,但是为什么结果不一样呢?

// Look at results in your browser's console

console.log(
  Object.call(null,2), // Number {2}
  Object.__proto__.call(null,2), // undefined

  Object.call(null,''), // String {""}
  Object.__proto__.call(null,'') // undefined
);

【问题讨论】:

    标签: javascript object call


    【解决方案1】:

    Object.call 是对Function.prototype.call 的引用(因为Object.__proto__Function.prototype):

    console.log(Object.call === Function.prototype.call);
    console.log(Object.__proto__.call === Function.prototype.call);
    console.log(Object.__proto__ === Function.prototype);

    Object 是一个构造函数(例如,new Object(...) 给你一个对象)。调用Object.call 会导致调用Function.prototype.call,调用上下文为ObjectFunction.prototype.call 使用它来确定需要调用哪个函数。

    所以

    Object.call(null,2)
    

    基本一样
    Object(2);
    

    在对象包装器中为您提供number

    相比之下,使用Object.__proto__.call,您调用Function.prototype.call,调用上下文为Object.__proto__。但是Object.__proto__Function.prototypeFunction.prototypeper the specification

    接受任何参数并在调用时返回 undefined。

    console.log(Function.prototype());

    所以,当用它调用.call 时,无论如何,它只会返回undefined(但它不会抛出错误或任何东西,即使你可能认为它应该 em> - 调用 Function.prototype 并没有任何意义)。

    以下表达式都在做完全相同的事情:

    Object.__proto__.call(null,2) // undefined
    Function.prototype.call(null,2) // undefined
    Function.prototype(2) // undefined
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-16
      • 1970-01-01
      • 1970-01-01
      • 2013-05-31
      • 2018-06-20
      • 1970-01-01
      • 2011-08-12
      • 1970-01-01
      相关资源
      最近更新 更多