0

次のように JavaScript で囲まれた関数を持っています。

var myFunction = function (options) {
    function blah() {
        var blahString = options.blahString;
        //more blah
    }

    function blah2() {
        //blah2
    }

    return {
        blah : function { return blah(); },
        blah2 : function { return blah2(); }
    }
};

HTML を使用しているとき、電話をかけようとするとmyFunction.blah()the object has no method 'blah'.

グローバルスコープで返された関数にアクセスするにはどうすればよいですか?

ありがとう!

4

2 に答える 2

1

これは、機能しない理由と機能させる方法を説明するだけです。物事を学ぶには、これで十分です。実際には、他の人が正しい方向に導くことができるように、達成しようとしていることを説明する必要があります。

// A scope of a function is activated ONLY when it is invoked

// Let us define a function
var myFunction = function (options) {
    function blah() {
        alert("I am blah");
    }

    function blah2() {
        //blah2
    }
    alert("I am active now and I am returning an object");
    return {
        blah: function () {
            return blah();
        },
        blah2: function () {
            return blah2();
        }
    };
};

myFunction.blah3 = function () {
    alert("I am blah3");
};

// myFunction is not invoked, but justed used as an identifier. 
// It doesn't have a method blah and gives error
myFunction.blah();

// blah3 is a static method of myFunction and can be accessed direclty using myFunction  
myFunction.blah3();

// myFunction is invoked, which returns an object
// it contains the function blah
myFunction().blah();

// or
var myObject = myFunction();
myObject.blah();
myObject.blah2();
于 2013-06-03T04:11:39.113 に答える
0
var myFunction = (function (options) {
  function blah() {
    return options.a;
  }

  function blah2() {
    //blah2
  }

  return {
    blah: function() { return blah(); },
    blah2: function() { return blah2(); }
  };
});

alert(myFunction({a:1, b:2}).blah());

これはうまくいきます。注記blah: function<-- 必要()

http://jsfiddle.net/kw6fJ/1を参照

于 2013-06-03T03:50:56.983 に答える