[英]Passing parameters to new() in Javascript
我開始使用Node.js,特別是LessCSS編譯器。 我在lessc腳本的源代碼上看到了此調用:
new(less.Parser) ({
paths: [path.dirname(input)].concat(options.paths),
optimization: options.optimization,
filename: input,
strictImports: options.strictImports,
dumpLineNumbers: options.dumpLineNumbers
}).parse(data, function (err, tree) {
//...
});
我不了解new(lessParser)({})
調用的工作方式。
從我一直在閱讀的有關面向對象Javascript的內容中,我僅發現了這樣的新實例: object = new Someting
因此,問題是:在這種情況下, new
工作方式如何? 它調用less.Parser
作為構造函數嗎? 另外,括號(在新呼叫之后)執行/返回的是什么?
謝謝!
您發布的代碼是 究竟 從技術上(或多或少)與
var parserOptions = {
paths: [path.dirname(input)].concat(options.paths),
optimization: options.optimization,
filename: input,
strictImports: options.strictImports,
dumpLineNumbers: options.dumpLineNumbers
};
var parser = new less.Parser(parserOptions);
parser.parse(data, function (err, tree) {
//...
});
但是在“非常規”位置帶有一些捷徑和括號。
JavaScript是一種松散類型的語言,用令牌解釋。 這意味着只要尊重語法,就不會對語法進行太多限制。
這讓事情像:
var a = false;
var b = function() { };
var c = false;
new(a || b || c)();
完全有效,並將創建b
的新實例,因為它是在測試變量a
之后定義的第一個非假值。 (請注意,它不會檢查b
是否實際上是一個function
。如果b
為非false而不是函數,則JS引擎會在運行時拋出它不是函數的信息。)
只是一個評論。
表達式new(less.Parser)({…})
與new less.Parser({…})
。
括號是一個分組運算符,表示“將該表達式評估為單個表達式”。 當括號中的表達式返回不帶括號的不同結果時,通常使用該語法,例如
var x, y = 7;
alert( typeof (x || y)) // "number"
alert( typeof x || y ) // "undefined"
但是,由於它們對OP中的結果沒有影響,因此它們毫無意義,而且可能有害,因為它們將一種眾所周知的模式更改為一種可能看起來像new
函數的函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.