新的运算符意味着在JQuery中

时间:2011-06-17 07:12:51

标签: jquery plugins new-operator

我在互联网上遇到过这段代码。它是关于实现打印功能的插件。我只是想知道 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;
}

如果有人可以解释在新的时候调用弹出功能背后的理性,我会非常感激。

3 个答案:

答案 0 :(得分:4)

new运算符会创建新的object Popup()。 这样,如果你有多个不同的弹出窗口,你可以通过说:

来创建它们
popup1 = new Popup();
popup2 = new Popup();

然后你就可以给他们自己的参数。

编辑感谢评论中的pst

然而,这不是这里的情况。请注意,“构造函数”返回 - 因此,“新对象”将被静默丢弃,并返回newWin中包含的对象。

答案 1 :(得分:4)

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不会在内部返回。

这个弹出功能只是有效但无用的代码。

答案 2 :(得分:0)

实例化一个新的Popup(class)实例并将其分配给变量printWindow。