новый оператор означает в JQuery - PullRequest
1 голос
/ 17 июня 2011

Я наткнулся на этот код в интернете.Речь идет о плагине, который реализует функции печати.Мне просто интересно, что означает оператор new при вызове функции.

$.fn.printArea = function( options )
{
  printWindow = new Popup();
  writeDoc = printWindow.doc;
}

function Popup()
{
    var windowAttr = "location=yes,statusbar=no,directories=no,menubar=no,titlebar=no,toolbar=no,dependent=no";
    windowAttr += ",width=" + settings.popWd + ",height=" + settings.popHt;
    windowAttr += ",resizable=yes,screenX=" + settings.popX + ",screenY=" + settings.popY + ",personalbar=no,scrollbars=no";

    var newWin = window.open( "", "_blank",  windowAttr );

    newWin.doc = newWin.document;

    return newWin;
}

Если бы кто-то мог объяснить рациональные причины вызова функции popup в new, я был бы очень признателен.

Ответы [ 3 ]

4 голосов
/ 17 июня 2011
printWindow = new Popup();
// is the same as
// create a new `this` scope for the Popup function from the prototype.
var temp_this = Object.create(Popup.prototype);
// call the function with the `this` context and store the result.
var o = Popup.call(temp_this);
// if the result is an object then assign it to the variable
// otherwise assign the `this` value to the variable.
printWindow = typeof o === "object" ? o : temp_this;
// It actually does more. Go read the ES5 spec.

В этом случае Popup - это глупый конструктор, который все равно возвращает объект, поэтому ключевое слово new бесполезно, поскольку this не возвращается внутри.

Это просто допустимый, но бесполезный код для этой всплывающей функции.

4 голосов
/ 17 июня 2011

Оператор new создает новый object из Popup().Таким образом, если у вас будет несколько разных всплывающих окон, вы можете создать их, сказав:

popup1 = new Popup();
popup2 = new Popup();

И тогда вы сможете задать им свои параметры.

РЕДАКТИРОВАТЬспасибо pst в комментариях

Однако здесь дело обстоит не так.Обратите внимание, что «конструктор» возвращает - таким образом, «новый объект» молча отбрасывается, и возвращается объект, содержащийся в newWin.

0 голосов
/ 17 июня 2011

Создается новый экземпляр Popup (class) и присваивается переменной printWindow.

...