JavaScript-js如何实现代码重载?
有如下一个JS类a
var a = function(){
...
ff:function(){ ....N多代码}
};
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
有如下一个JS类a
var a = function(){
...
ff:function(){ ....N多代码}
};
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
参考以下代码。
重点在于fun.apply(this);这个用法,可以手工指定this指针。如果有参数的话可以
fun.apply(this,[a,b,c])即用一个数组传参数进。
这个其实不继承也可以执行,javascript不是强类型语言。
继承分为prototype和非prototype两种。效果是一样的。
function a()
{
this.name = "a";
this.vshow = function()
{
alert('vshow name: ' + this.name);
}
}
a.prototype.show = function(){alert('name: ' + this.name);}
a.prototype.showall = function(){a.prototype.show.apply(this);this.show();this.vshow();}
var t = new a();
t.show();
t.vshow();
function b()
{
this.name = "b";
this.name2 = "b";
var lastvshow = this.vshow;
this.vshow = function()
{
alert('vshow name2: ' + this.name2);
lastvshow.apply(this);
}
}
b.prototype = new a();
b.prototype.show = function(){ alert('name2: ' + this.name2); a.prototype.show.apply(this); }
var t2 = new b();
t2.show();
t2.vshow();
t2.showall();
简单点就
function a() {
this.name = 'a';
this.alert = function() {
alert(this.name+' in func a');
};
}
function b() {
this.name = 'b';
this.alert = function() {
alert(this.name+' in func b');
this.parent.alert.call(this);
};
}
b.prototype = new a();
b.prototype.parent = b.prototype;
var obj = new b();
obj.alert();
复杂的话就要写如下代码:来自于《JavaScript设计模式》(3)——继承
/*给函数原型增加一个extend函数,实现继承*/
Function.prototype.extend = function(superClass){
if(typeof superClass !== 'function'){
throw new Error('fatal error:Function.prototype.extend expects a constructor of class');
}
var F = function(){}; //创建一个中间函数对象以获取父类的原型对象
F.prototype = superClass.prototype; //设置原型对象
this.prototype = new F(); //实例化F, 继承父类的原型中的属性和方法,而无需调用父类的构造函数实例化无关的父类成员
this.prototype.constructor = this; //设置构造函数指向自己
this.superClass = superClass; //同时,添加一个指向父类构造函数的引用,方便调用父类方法或者调用父类构造函数
return this;
};
/*Class Person*/
function Person(name){
this.name = name;
}
Person.prototype.getName = function(){
return this.name;
};
/*Class Author*/
function Author(name, books){
Author.superClass.call(this, name);
this.books = books;
}
/*
* 这里用了链式调用,下面语句等价于:
* Author.extend(Person); Author.prototype.getBooks = function(){```};
*/
Author.extend(Person).prototype.getBooks = function(){
return this.books;
};
/*方法的覆写,通过superClass调用父类的方法获得基本信息,再调用子类的方法获得更特殊的信息*/
Author.prototype.getName = function(){
var name = Author.superClass.prototype.getName.call(this);
return name + ', Author of ' + this.getBooks();
};
你可以这样呀
var b=function(sColor){
var at=new a(sColor);
return{
ff:function(){
alert("more than b");//这里就是B特有的逻辑
at.ff();
}
}
}
http://blog.csdn.net/fengxiaowenhappy/article/details/4948264
说的很清楚看看