什么是JavaScript构造`{}`和`call()`?

dot*_*hen 3 javascript syntax

在回答上一个问题时,我收到了这个有用的答案:

for (var i in someArray) {
    if ({}.hasOwnProperty.call(someArray, i))
        alert(someArray[i]); 
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 我在哪里可以阅读{}构造?我在jQuery文档中找不到它,谷歌也不可能.

  2. 我在哪里可以阅读call()函数.搜索jQuery API站点并没有发现任何看似相关的内容.

谢谢.

Mat*_*att 5

  1. {}一种声明空对象的方法.它被称为对象文字语法,您可以在这里阅读更多相关信息.

  2. call()方法是一种JavaScript方法(不是jQuery).同样,您可以在此处阅读更多相关信息.基本上,call()允许您更改this正在调用的函数内部的值call().它与apply();

    var array = new Array;
    
    function foo() {
        alert(this === array);
    };
    
    foo(); // false;
    foo.call(array); // true
    
    Run Code Online (Sandbox Code Playgroud)

综观特别是代码中,我们遍历阵列和使用该hasOwnProperty方法来检查值(i)存在所述someArray阵列(相对于在的原型链是someArray.

至于为什么我们使用{}.hasOwnProperty而不是someArray.hasOwnProperty,我用户可能正在防止 hasOwnProperty被声明someArray(通过使用空对象).如果他没有这样做,那么以下可能是可能的;

var someArray = [];
someArray.hasOwnProperty = function () { 
    return true; // always return true... muahahaha.
}
Run Code Online (Sandbox Code Playgroud)

甚至;

var someArray = [];
someArray.hasOwnProperty = 4; // now hasOwnProperty isn't even a function. Calling someArray.hasOwnProperty() will result in an error.
Run Code Online (Sandbox Code Playgroud)