0

locals関数が呼び出されたときに、オブジェクトがそのすべての変数をスコープ内に持つことを許可したいと思います。例えば:

function test() {
  console.log(string)
}

var locals = {
  string: 'test'
}

function callTest(fn, locals) {
  // INSERT MAGIC
  fn()
}

callTest(test, locals) // -> should log 'test' without any errors

私が避けようとしていること:

function(locals) {
  with (locals) {
    console.log(string)
  }
}

ユースケース:コールバックを使用してテンプレートシステムを作成したい。ローカルは、「ローカル」オブジェクトではなく、実際にはローカルである必要があります。

module.exports = function(callback) {
  callback(null, string)
}

はい、私は次のことができますが、それは醜いです。今のところ、これは私がそれをしている方法です:

module.exports = function(locals, callback) {
  callback(null, locals.string)
}

これはまったく可能ですか、それともどのプログラミング言語でも可能ですか?

4

3 に答える 3

0

(問題を解決するという点で)代替手段を探していないことは知っています。私はそれについて議論しません。グローバル変数または関数引数を使用せずに、私が考えることができる唯一のこと(これは通常の方法です):

function test() {
    console.log( this.string );
}

function callTest(fn, locals) {
    // INSERT MAGIC
    fn.call(locals);
}

var locals = {
    string: 'test';
}

callTest(test, locals);

あなたの要件との唯一の不一致は、それlocalsthis.

于 2012-10-17T23:07:37.023 に答える
0

正確にはわかりませんが、これはどうですか: (「テスト」をログに記録します)

function test( locals ) {
    console.log( locals.string );
}

var locals = {
    string: 'test';
}

function callTest(fn, locals) {
    // INSERT MAGIC
  fn( locals );
}

callTest(test, locals); // -> should log 'test' without any errors
于 2012-10-17T22:59:16.167 に答える
0

コンテキスト プロパティ ( this.property) を使用するか、リンクされた記事を読んで、Function必要なものを確実に取得できるコンストラクターを使用してください。

 with ステートメントを使用しないテンプレート

于 2012-10-17T23:18:35.930 に答える