0

私は時計と呼ばれるオブジェクトを持っています。

time と呼ばれるオブジェクトのメソッドがあります。

time メソッド内で this.propertyName を使用すると、時計オブジェクトにプロパティが与えられますよね? しかし、たとえば、プロパティの値を割り当てる前に実行する必要がある if/else ステートメント (time メソッド自体の内部) がある場合はどうなるでしょうか?

if(t.getHours() >= 12){
        this.ap = "AM";
    }else{
        this.ap = "PM";
    }

したがって、this.ap = "hi" のような単純な値を使用した場合、これは正常に機能します。それは私のオブジェクトにプロパティを与えます。上記のようなステートメントがある場合、プロパティは未定義です。これを回避する最善の方法は何ですか?

また、私は自分のオブジェクトを使い始めたばかりなので、別の簡単な質問です。3 つの個別のメソッドを持つオブジェクトがあり、1 つのメソッド内で宣言されているすべてのメソッドで値を使用したい場合、それをオブジェクトのプロパティとして割り当てると、これが可能になります。私は正しいですか?

したがって、あるメソッドで var property = "" を使用した場合、他のメソッドでこれにアクセスする唯一の方法は、それを返すことです。しかし、プロパティをオブジェクトに設定すると、これは解決しますか? これを試してみることができることはわかっていますが、適切な方法を知りたいだけです。

編集:これは例です。明らかに私は何かを誤解しています。メソッド内からプロパティを定義できないようです。

var clock = {};

clock.test1 = "test 1.";

clock.time = function(){

    clock.test = "test 2."; 

    if(t.getHours() >= 12){
        clock.ap = "PM";
    }else{
        clock.ap = "AM";
    }

}

alert(clock.test1);  //success
alert(clock.test); //returns undefined
    alert(clock.ap);  //returns undefined
4

1 に答える 1

2

バインドに関する問題を回避する通常の方法thisは、次のようにすることです。

var MyObject = function() {
    var self = this;
    self.someProperty = "foo";

    self.someMethod() {
        self.someProperty = "bar";
    }
}

var anInstance = new MyObject();
console.log(anInstance.someProperty);      // foo
anInstance.someMethod();
console.log(anInstance.someProperty);      // bar

thisこれにより、メソッドの呼び出し方法 (たとえば、DOM イベントのハンドラーとしてメソッドを使用する) によって発生する可能性がある、期待したものとは異なるものになるという問題が回避されます。

closureこの例は、Javascript の非常に重要な概念である を活用することで機能します (Google で調べてください)。

于 2013-05-15T12:36:24.887 に答える