我需要创建简单的可重用javascript对象,发布几个方法和参数化构造函数.在阅读了几个"在JavaScript中的OOP"指南后,我坐在这里空头.我怎么能在地球上这样做?
这是我最后一个非工作代码:
SomeClass = function(id) { this._id = id; } (function() { function intFun() { return this._id; } SomeClass.prototype.extFun = function() { return incFun(); } })();
JW... 5
这是我通常的做法:
MyClass = function(x, y, z) { // This is the constructor. When you use it with "new MyClass()," // then "this" refers to the new object being constructed. So you can // assign member variables to it. this.x = x; ... }; MyClass.prototype = { doSomething: function() { // Here we can use the member variable that // we created in the constructor. return this.x; }, somethingElse: function(a) { } }; var myObj = new MyClass(1,2,3); alert(myObj.doSomething()); // this will return the object's "x" member alert(myObj.x); // this will do the same, by accessing the member directly
通常,"this"关键字在其中一个对象的方法中使用时,将引用该对象本身.在构造函数中使用它时,它将引用正在创建的新对象.因此在上面的示例中,两个警报语句都将显示"1".
此规则的一个例外是当您将其中一个成员函数传递给其他位置,然后调用它时.例如,
myDiv.onclick = myObj.doSomething;
在这种情况下,JavaScript忽略了"doSomething"属于"myObj"的事实.因此,doSomething中的"this"将指向另一个对象,因此该方法将无法按预期工作.要解决这个问题,您需要指定"this"应该引用的对象.您可以使用JavaScript的"调用"功能:
myDiv.onclick = function() { myObj.doSomething.call(myObj); }
这很奇怪,但你最终会习惯它.最重要的是,当传递方法时,您还需要传递应该调用它们的对象.
这是我通常的做法:
MyClass = function(x, y, z) { // This is the constructor. When you use it with "new MyClass()," // then "this" refers to the new object being constructed. So you can // assign member variables to it. this.x = x; ... }; MyClass.prototype = { doSomething: function() { // Here we can use the member variable that // we created in the constructor. return this.x; }, somethingElse: function(a) { } }; var myObj = new MyClass(1,2,3); alert(myObj.doSomething()); // this will return the object's "x" member alert(myObj.x); // this will do the same, by accessing the member directly
通常,"this"关键字在其中一个对象的方法中使用时,将引用该对象本身.在构造函数中使用它时,它将引用正在创建的新对象.因此在上面的示例中,两个警报语句都将显示"1".
此规则的一个例外是当您将其中一个成员函数传递给其他位置,然后调用它时.例如,
myDiv.onclick = myObj.doSomething;
在这种情况下,JavaScript忽略了"doSomething"属于"myObj"的事实.因此,doSomething中的"this"将指向另一个对象,因此该方法将无法按预期工作.要解决这个问题,您需要指定"this"应该引用的对象.您可以使用JavaScript的"调用"功能:
myDiv.onclick = function() { myObj.doSomething.call(myObj); }
这很奇怪,但你最终会习惯它.最重要的是,当传递方法时,您还需要传递应该调用它们的对象.