0

我有一个叫做时钟的对象。

我有一个称为时间的对象的方法。

如果我在 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 中一个非常重要的概念,你应该阅读(谷歌它)。

于 2013-05-15T12:36:24.887 回答