如何在JS中公开成员变量的公共方法

时间:2014-08-11 09:12:38

标签: javascript oop

我有一个班级

function A()
{
   var that = this;
   var b = new B(); 
   this.setBSize = function(newSize)
   {
      b.setSize(newSize);
   }


};

function B()
{
   var that = this;

   this.setSize = function(newSize)
   {
   ...
   }
}

a = new A();
a.setBSize(5);

如何避免编写setBSize方法?如何自动公开b的公共方法?我想像这样打电话

a.setSize(5);

我还需要new B(); A() 内的{{1}}的引用

5 个答案:

答案 0 :(得分:3)

如果要继承A

中的所有方法,可以随时将B的原型设置为B
function A() {
    var that = this;
};

function B() {
    var that = this;

    this.setSize = function (newSize) {
        console.log(newSize); // 5
    }
}

A.prototype = new B();

a = new A();
a.setSize(5);

FIDDLE

答案 1 :(得分:2)

jQuery$.extend(that, new B());angularangular.extend(that, new B());

function A()
{
   var that = this;
   $.extend(that, new B());
};

function B()
{
   var that = this;

   this.setSize = function(newSize)
   {
   ...
   }
}

a = new A();
a.setSize(5);

如果您想在private类中使用任何B()个变量,请将它们定义为var someVar,将所有公共(可覆盖的)变量定义为that.somePublicVar

答案 2 :(得分:1)

您可以使用call方法:

function A() {
    var that = this;
    B.call(this);
};

function B() {
    var that = this;
    this.setSize = function (newSize) {
        this.size = newSize;
    }
}

var a = new A();
a.setSize(5);

基本上你在B的上下文中调用A,会发生的事情是B实例的所有属性都将被分配给this A {1}}实例。这种模式称为构造函数或方法借用。

答案 3 :(得分:1)

你应该利用原型设计。

创建一个在所有类(对象)中共享函数的构造函数:

var myConstructor = function(newSize){

   this.setSize = function(newSize)
   {
   ...
   }
}

现在你做实例:

var a = new myConstructor(someSize);

var b = new myConstrucotr(someSize);

现在,此更改a.setSize()b.setSize()

相同

答案 4 :(得分:1)

使用原型继承方法setSize并放弃所有thisthat代码。

function B() {
};
function A() {
    B.call(this);
};

B.prototype.setSize = function(newSize) {
    console.log(newSize);
}

A.prototype = Object.create(B.prototype);
A.prototype.constructor = A;
var a = new A();
a.setSize(5);               // 5
console.log(a instanceof A);// true
console.log(a instanceof B);// true