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

Javascript 如何在JS中公开成员变量的公共方法,javascript,oop,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.se

我有一节课

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()的引用
jQuery
$中的
A()

中是b。扩展(即,新的b())
angular
angular.extend(即新的B())

如果您想使用
B()
类中的任何
private
变量,请将它们定义为
var someVar
,将所有公共(可重写)变量定义为
。somePublicVar
,您可以使用该方法:

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

基本上,您在
A
的上下文中调用
B
,所发生的是
B
实例的所有自己的属性都将被分配给
这个
实例,它是
A
实例。此模式称为构造函数或方法借用。

如果要继承
B
中的所有方法,可以将
A
的原型设置为
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);

你应该利用原型

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

现在执行实例化:

var a = new myConstructor(someSize);

var b = new myConstrucotr(someSize);

现在有了这个变化,
a.setSize()
b.setSize()

使用prototype继承方法
setSize
并丢弃所有
这个
那个
代码是一样的

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

要避免调用构造函数,可以使用
Object.create
<代码>A.prototype=新的B()->
A.prototype=Object.create(B.prototype)当您有一个抽象基类时,它会有所帮助。以下答案可能会有所帮助:
var a = new myConstructor(someSize);

var b = new myConstrucotr(someSize);
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