JavaScript-js如何实现代码重载?

发布于 2017-01-22 15:36:29 字数 89 浏览 1002 评论 4

有如下一个JS类a

var a = function(){
...
ff:function(){ ....N多代码}
};

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

偏爱自由 2017-10-17 01:05:12

参考以下代码。
重点在于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();

偏爱自由 2017-07-16 14:14:24

简单点就

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

晚风撩人 2017-07-11 19:11:00

你可以这样呀

 var b=function(sColor){
var at=new a(sColor);
return{
ff:function(){
alert("more than b");//这里就是B特有的逻辑
at.ff();
}
}
}

晚风撩人 2017-02-06 17:11:27

http://blog.csdn.net/fengxiaowenhappy/article/details/4948264

说的很清楚看看

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文