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