对象返回未在javascript中定义

时间:2010-12-17 14:43:35

标签: 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中创建一个仅用于脑饲料的应用程序,并且会欣赏一点指导,尤其是你实际上称之为什么,它是一个类????

感谢

2 个答案:

答案 0 :(得分:5)

您必须访问this

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

说明:在每个函数中,this引用调用函数的上下文。如果使用func()调用函数,则this将引用全局对象({{ 1}}在浏览器中。) 如果您致电window,则obj.func()会引用this

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

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


但是

obj

不起作用,因为var myObj = myTest.testCode(); var tester = myObj.myTester; 返回字符串myTest.testCode()(并且字符串没有"testing"属性)。如果您想使此代码生效,则必须在myTester中返回this

testCode

然后,这两行与

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

我建议您阅读JavaScript的一些介绍,例如: MDC - JavaScript Guide并特别阅读对象。

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

答案 1 :(得分: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");