您好我想在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中创建一个仅用于脑饲料的应用程序,并且会欣赏一点指导,尤其是你实际上称之为什么,它是一个类????
感谢
答案 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");