2010-12-17 106 views
0

你好我试图让我的头围绕在javascript一些基本的东西定义,我想创建相当于一个类 见下文:对象返回未在JavaScript

var myTest = { 
    myTester:"testing", 
    testCode:function(){ 
    return myTester; 
} 
}; 

当我打电话alert(myTest.testCode());我得到错误myTester未定义;

我也有类似问题,尝试设置myTester的值太大,我想在这里实现的是沿着这一线的东西时:

var myObj = myTest.testCode(); 
var tester = myObj.myTester; 

为MyObj中是我应该再创建一个对象能够访问它的值,但我通常不做JavaScript只是jQuery,我 试图创建一个纯JavaScript的应用程序只为大脑饲料,并会感激一点指导,特别是你实际称这是什么,它是一类????

感谢

回答

5

您有权访问this

var myTest = { 
    myTester:"testing", 
    testCode:function(){ 
    return this.myTester; 
} 
}; 

说明:在每一个功能,this指函数被调用的背景下,如果调用func()功能则this将参考到全局对象(浏览器中的window)。
如果您致电obj.func(),则this将参考obj

这是函数和对象之间的唯一连接。事实上,你将一个函数定义为一个对象的属性,而不是使该函数知道该对象。

函数是JavaScript中的头等对象,因此不会绑定到任何对象(或类)(就像其他语言(例如Java))。


var myObj = myTest.testCode(); 
var tester = myObj.myTester; 

是行不通的,因为myTest.testCode()返回字符串"testing"(和字符串没有myTester属性)。如果你想使这段代码工作,你就必须在testCode返回this

var myTest = { 
    myTester:"testing", 
    testCode:function(){ 
    return this; 
} 
}; 

但随后,两条线是相同的

var tester = myTest.myTester; 

我建议阅读一些介绍到JavaScript,例如MDC - JavaScript Guide并特别阅读有关物品。

P.S .:非常正确,类不存在于JavaScript中。只有对象和构造函数。

+0

我怎样才能得到多值以上可能是一个流浪汉例如,即myTester:null,myTester2:null,testCode()函数(){this.myTester =“123”; this.myTester2 =“456”; } 如何获得myTester和myTester2的值,这取决于测试代码中发生了什么,如果你明白我的意思,谢谢 – davethecoder 2010-12-17 14:58:51

+0

@ minus4:好的,如果你的对象存储在var myTest = {}'中。然后你会这样做:'myTest.testCode();'然后你可以通过'myTest.myTester'或'myTest.myTester2'访问这些值。但是您不需要存储'testCode()'的返回值,因为您无论如何都不会返回任何内容。 – 2010-12-17 15:02:25

+0

邪恶是的,试图它的一切都在一起:-)谢谢朋友 – davethecoder 2010-12-17 15:05:36

0

你在我的例子中有什么不会被称为类,在我看来,因为它没有构造函数。在这一点上,它只是一个对象。

正如Felix Kling所提到的,您需要明确使用this从其方法中引用对象的属性。

本例不工作,做你想做的:

var myObj = myTest.testCode(); 
var tester = myObj.myTester; 

testCode方法(一次固定使用this),返回myTester属性(字符串)。该字符串本身不具有myTester属性,因此tester变量将包含undefined

你可以,而不是仅仅做

var tester = myTest.myTester; 

退一步,一类的一般模式可以是这样的:

MyClass = function(initialValue) { 
    this._myProperty = initialValue; 
} 

MyClass.prototype = { 
    getMyProperty: function() { 
    return this._myProperty; 
    }, 

    setMyProperty: function(value) { 
    this._myProperty = value; 
    } 
}; 

var myObj = new MyClass("test"); 
alert(myObj.getMyProperty()); 
myObj.setMyProperty("something");