当前位置:  开发笔记 > 编程语言 > 正文

在javascript中封装

如何解决《在javascript中封装》经验,为你挑选了1个好方法。

我需要创建简单的可重用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);
}

这很奇怪,但你最终会习惯它.最重要的是,当传递方法时,您还需要传递应该调用它们的对象.



1> JW...:

这是我通常的做法:

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);
}

这很奇怪,但你最终会习惯它.最重要的是,当传递方法时,您还需要传递应该调用它们的对象.

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有