我有一个班级
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}}的引用
答案 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);
答案 1 :(得分:2)
jQuery
:$.extend(that, new B());
在angular
:angular.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
并放弃所有this
和that
代码。
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