2017-06-01 8 views
0

私は組み込み可能なjavascriptウィジェットを構築しようとしています。次の(例)はscriptタグに含まれています。組み込み可能なjavascriptウィジェットのプロトタイプと関数がどのように通信できますか?

(function (window) { 

    function TestFunction(params) { 
     console.log("init"); 
     this.someVal = "ThisVal"; 
    } 

    TestFunction.prototype.protoFunc = function() { 
     return "Hello " + this.someVal; 
    }; 

    function hello() { 
     return eval("TestFunction.protoFunc();"); 
    } 

}(window)); 

let test = TestFunction({}); 

を次のように私は、その後

test.protoFunc(); 

こんにちはThisVal

を入力した場合、私はウィジェットをインスタンス印刷されます。しかし、hello関数が起動すると、それはTestFunction.protoFunc is not a functionというエラーをスローします。 hello()関数がTestFunction.prototype.protoFunc関数を起動する方法はありますか?

答えて

0

例を少し更新しました。ワークフローはオブジェクト駆動型です。私があなたを誤解した場合、私にいくつかの情報を教えてください。

(function (window) { 
 

 
    // Object instance 
 
    let instance = null; 
 

 
    // Class definition 
 
    var TestFunction = function (params) { 
 
     console.log("init"); 
 
     this.options = params; 
 
     
 
     setTimeout(hello, 100); // triggering after initiation 
 
    } 
 

 
    // Class method 
 
    TestFunction.prototype.protoFunc = function() { 
 
     console.log("Hello " + this.options.name); 
 
    }; 
 

 
    // the triggering function 
 
    function hello() { 
 
     return eval("instance.protoFunc()"); 
 
    } 
 

 
    // initiate the instance 
 
    instance = new TestFunction({ name: 'Jon Doe' }); 
 
    
 
    hello(); // trigger outside of class 
 
}(window));

私は作品をカプセリングする方法をお見せするために別の例をしました。

var TestFunction = (function() { 
 
    function TestFunction(params) { 
 
    console.log('init'); 
 
    this.options = params; 
 
    } 
 
    TestFunction.prototype.setName = function(name) { 
 
    this.options.name = name; 
 
    }; 
 
    TestFunction.prototype.getName = function() { 
 
    return this.options.name; 
 
    }; 
 
    TestFunction.prototype.protoFunc = function() { 
 
    console.log("Hello " + this.getName()); 
 
    }; 
 
    return TestFunction; 
 
}()); 
 

 
var test = new TestFunction({ 
 
    name: 'test' 
 
}); 
 

 
test.protoFunc(); 
 
test.setName('Wuhu!'); 
 
test.protoFunc();

+1

ねえジェイソンは、応答していただきありがとうございます。手元にあるシナリオに少し近づくように質問を更新しました - 評価を使用しようとしています... "静的な"機能が実行可能かどうかはわかりません。このウィジェットは、インスタンス化されたときにパラメータで異なる値をとり、ウィジェットが使用されるときに変更されます。 'this.someVal =" ThisVal ";'はthis.someVal = "covfefe"; 'になります。これは、ウィジェット外かウィジェットコード内からです。 – user714852

+0

@ user714852 'this'はオブジェクト内でのみアクセス可能です。それ以外の場合は、静的に使用してください。最初のシナリオを少し更新して、すべてのオブジェクトベースにしました。通常、class internとexternの間で通信するためにsetterまたはgetterを使用します。それはデータのカプセル化を意味します –

関連する問題