浏览 2925 次
锁定老帖子 主题:JavaScript几种继承继的方法总结
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-12-11
最后修改:2008-12-11
1.对象冒充方法,可以多承继; 如: A=function() { this.code="001"; this.name="whiteangell"; this.getCode=function() { return this.code; } this.getName=function() { return this.name } }; B = function() { this.newMethod=A; this.newMethod(); this.age=20; this.getAge=function() { return this.age; } }; var bb = new B(); alert(bb.getName()); 2.原型链法; 如: A=function() { this.code="001"; this.name="whiteangell"; this.getCode=function() { return this.code; } this.getName=function() { return this.name } }; B = function() { this.age=20; this.getAge=function() { return this.age; } }; B.prototype=new A(); var bb = new B(); alert(bb.getName()); 3.拷贝复制法 如: Object.extend = function(destination,source) { for ( pro in source ) { destination [pro] = source [pro]; } return destination ; }; A = function(){}; A.prototype = { code:"001", name:"whiteangell", getCode:function() { return this.code; }, getName:function() { return this.name } }; B= function(){}; B.prototype= Object.extend({ age:20, getAge:function() { return this.age; } },A.prototype); var bb = new B(); alert(bb.getName()); 4.call()方法,可以多承继; 如: A=function() { this.code="001"; this.name="whiteangell"; this.getCode=function() { return this.code; } this.getName=function() { return this.name } }; B = function() { A.call(this); this.age=20; this.getAge=function() { return this.age; } }; var bb = new B(); alert(bb.getName()); 5.apply()方法,可以多承继; 如: A=function() { this.code="001"; this.name="whiteangell"; this.getCode=function() { return this.code; } this.getName=function() { return this.name } }; B = function() { A.apply(this); this.age=20; this.getAge=function() { return this.age; } }; var bb = new B(); alert(bb.getName()); 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-12-12
第一个例子:有this.newMethod();
为什么要加这句话呢。不加却出错。能解释一下吗。 |
|
返回顶楼 | |
发表时间:2008-12-12
在线啊。刚才是在JavaEye第一个帖子,呵呵。当然这是第二个。
希望给我解疑下。 |
|
返回顶楼 | |
发表时间:2008-12-12
最后修改:2008-12-12
this.newMethod()相当于new A()。当构造对象B的时候,调用newMethod相当于启动A的构造函数,注意这里的上下文环境中的this对象是B的实例,所以在执行A构造函数脚本时,所有A的变量和方法都会赋值给this所指的对象,即B的实例,这样子就达到B继承了A的属性方法的目的。
|
|
返回顶楼 | |
发表时间:2008-12-15
lz说的太复杂,简单的说就是执行了A函数,其实js中没有对象的概念,只有函数的。之所以有个new就是为了类似java
|
|
返回顶楼 | |