Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 关于OOP的几个问题_Javascript_Oop_Object_Methods_Properties - Fatal编程技术网

Javascript 关于OOP的几个问题

Javascript 关于OOP的几个问题,javascript,oop,object,methods,properties,Javascript,Oop,Object,Methods,Properties,我有一个物体叫时钟 我有一个方法,叫做时间 如果我在time方法中使用this.propertyName,这将为我的时钟对象提供属性,对吗?但是如果有一个if/else语句(在time方法本身内),例如,它需要在 是否可以指定该属性的值 if(t.getHours() >= 12){ this.ap = "AM"; }else{ this.ap = "PM"; } 因此,如果我使用这样一个简单的值。ap=“hi”,这很好。它将属性赋予我的对

我有一个物体叫时钟

我有一个方法,叫做时间

如果我在time方法中使用this.propertyName,这将为我的时钟对象提供属性,对吗?但是如果有一个if/else语句(在time方法本身内),例如,它需要在 是否可以指定该属性的值

if(t.getHours() >= 12){
        this.ap = "AM";
    }else{
        this.ap = "PM";
    }
因此,如果我使用这样一个简单的值。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

避免绑定此出现问题的通常方法是执行以下操作:

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
这就避免了
这个
不是您所期望的那样的问题,这取决于您调用方法的方式(例如,将方法用作某个DOM事件的处理程序)


本例通过利用
闭包
,这是Javascript中一个非常重要的概念,您应该在上面阅读(Google it)。

您需要显示更多的代码。这个
的绑定在JavaScript中有点棘手。通常的解决方案是添加一个名为
的属性,该属性
self
或类似于对象的属性,并在创建对象时为其指定
。这样,您总是有一个对对象本身的引用。
=>
是一个语法错误,它应该是
=
t.getHours
中的
t
是什么?(你确定
getHours
不是一个函数,用
t.getHours()
?)调用它吗?^谢谢你指出这一点,我确实想把getHours作为一个函数键入。好的。有了这些东西,它应该能工作了。也就是说,如果
this.ap=“hi”
工作,并且您将if/else结构放在相同的位置,然后假设
t
在范围内并且是一个具有
getHours()
方法的对象,它也会工作。有关更多帮助,请显示if/else出现的所有函数,并显示如何调用该函数。关于编辑,您需要实际调用
clock.time()
函数,然后再尝试使用在该函数中创建的属性,如
clock.test
clock.ap
,函数不会自动运行。(您还没有解释
t
对象在
t.getHours()