Что такое JavaScript-конструкции `{}` и `call ()`? - PullRequest
3 голосов
/ 17 февраля 2012

В ответ на предыдущий вопрос я получил этот полезный ответ :

for (var i in someArray) {
    if ({}.hasOwnProperty.call(someArray, i))
        alert(someArray[i]); 
}

Мои вопросы:

  1. Где я могу прочитать о конструкции {}? Я не могу найти его в документации по jQuery, и невозможно найти Google.

  2. Где я могу прочитать о функции call (). Поиск по сайту API jQuery не обнаруживает ничего похожего.

Спасибо.

Ответы [ 3 ]

5 голосов
/ 17 февраля 2012
  1. {} - это один способ объявления пустого объекта. Он называется литеральным синтаксисом объекта, и вы можете прочитать больше об этом здесь .

  2. Метод call() - это метод JavaScript (не jQuery). Опять же, вы можете прочитать больше об этом здесь . По сути, call() позволяет вам изменить значение this внутри функции, для которой вы вызываете call(). Это относится к apply();

    var array = new Array;
    
    function foo() {
        alert(this === array);
    };
    
    foo(); // false;
    foo.call(array); // true
    

Рассматривая код в частности, мы перебираем массив и используем метод hasOwnProperty, чтобы проверить, существует ли значение (i) в someArray массив (в отличие от цепочки прототипов someArray.

Что касается того, почему мы используем {}.hasOwnProperty вместо someArray.hasOwnProperty, я предполагаю , что пользователь может защищать от hasOwnProperty, объявленного на someArray (используя пустой объект). Если бы он этого не сделал, то было бы возможно следующее:

var someArray = [];
someArray.hasOwnProperty = function () { 
    return true; // always return true... muahahaha.
}

Или даже;

var someArray = [];
someArray.hasOwnProperty = 4; // now hasOwnProperty isn't even a function. Calling someArray.hasOwnProperty() will result in an error.
4 голосов
/ 17 февраля 2012
  1. {} - это литерал объекта (чистый javascript), никак не связанный с jQuery

http://www.dyn -web.com / учебники / obj_lit.php

  1. метод вызова снова является чистым javascript, а не специфичным для jQuery

http://www.webreference.com/js/column26/call.html

Итак, Google на «литерал объекта javascript» или «метод вызова javascript» .. пару примеров, связанных выше.

3 голосов
/ 17 февраля 2012

Вы путаете jQuery и JavaScript.

{} - это конструкция JavaScript и является пустым объектом.

call() метод также является частью JavaScript

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...