簡體   English   中英

將參數傳遞給Javascript中的new()

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM