我在互联网上遇到过这段代码。它是关于实现打印功能的插件。我只是想知道 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;
}
如果有人可以解释在新的时候调用弹出功能背后的理性,我会非常感激。
答案 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。