关于OOP的一些问题

时间:2013-05-15 12:29:24

标签: javascript oop object methods properties

我有一个名为clock的对象。

我有一个叫做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

1 个答案:

答案 0 :(得分: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 it)。