JavaScript基础(十一)---- 面向对象的继承方法
来源:互联网 发布:网址推广联盟 乐乎 编辑:程序博客网 时间:2024/05/22 09:03
1. 原型链的继承
把父类私有+公有的属性和方法,都给了子类公有的;(让子类.prototype=父类的实例)
例子:
function F(){ this.x=100; //父类私有 } F.prototype.showX=function(){}; //父类公有的; function S(){ this.y=200; //子类私有 } S.prototype=new F; //核心:把父类私有+公有的属性和方法,都作为子类公有的属性和方法; S.prototype.constructor=S;//修改S的constructor指向; var s=new S; console.dir(s);
2. call继承
把父类私有的属性和方法,给了子类私有的属性和方法;(注意:通过call改变this指向)
例子:
// call()中第一个参数:用来改变this指向 //call()中从第二个参数开始,相当于给call点前面的函数,从左往右一个个的传参; //注意:call继承只跟父类私有属性和方法有关,跟父类公有的方法没有关系; function F(){ //this指向F的实例; this.x=100;//父类私有的 this.showX=function(){ alert(this.x); } } var f=new F; console.dir(f); function S(name){//子类构造函数中,都放的是私有的属性和方法; //this-S的实例 F.call(this);//F中的this-F new出来的实例 this.y=200; this.name=name; } var s=new S('aaa'); console.dir(s);
3. 冒充继承
把父类私有+公有的属性和方法,都给了子类私有的;
例子:
function F(){//父类私有的 this.x=100; } F.prototype.showX=function(){}; F.prototype.showY=function(){}; var f=new F; function S(){ //this-S的实例; var f=new F; for(var attr in f){ this[attr]=f[attr]; } this.aa=123; } var s=new S; console.dir(s);
4. 混合继承1: call继承+原型链继承
call继承:在子类的构造函数中继承,一定要改变this指向;(通过call);
function F(){//私有 this.x=100; } F.prototype.showX=function(){};//公有 var f=new F; console.dir(f); function S(){//call继承在子类的构造函数中进行继承; F.call(this);//call继承 } //原型链继承在子类的prototype上进行继承 S.prototype=new F;//原型链继承; S.prototype.constructor=S; S.prototype.aaa='123'; var s=new S; console.dir(s);
5. 混合继承2: call继承+拷贝继承;
拷贝继承:extend(新对象,old对象);
function extend(obj2,obj1){ for(var attr in obj1){ obj2[attr]=obj1[attr]; } return obj2; } //混合继承2:call继承+拷贝继承 function F(){ this.x=100; } F.prototype.showX=function(){}; function S(){ F.call(this);//call继承 } //拷贝继承:克隆一份一模一样的; extend(S.prototype, F.prototype); var s=new S; console.dir(s);
6. 寄生式组合继承:call继承+Object.create()的思想;
function F(){//父类私有的 this.x=100; } F.prototype.showX=function(){} //父类公有的; //找一个中间类,只把公有的过滤进来; function Tmp(){}; //没有私有的属性和方法 Tmp.prototype=F.prototype; //Tmp只保留了F类公有的方法; function S(){ F.call(this);//call继承:把F私有的属性和方法继承过来了; } S.prototype = new Tmp;//S.prototype这个原型就相当于tmp的实例;就可以享用Tmp私有+公有的方法;但是我们知道,Tmp没有私有方法;只有公有方法; S.prototype.constructor=S; var s=new S; console.dir(s);
7. 批量操作公有属性,可以用{};
用{}的时候,一定要注意两点:
1. constructor会有问题,我们一定要重写constructor的指向;
2. 系统内置类的公有方法不能批量删除,这是浏览器对系统内置类的自我保护;所以,如果想删除的话,只能一个个的删除;
例子 — 删除公有属性:
Array.prototype.pop={};Array.prototype.push={};Array.prototype.shift={};
例子 – 给数组添加一个公有的去重方法
Array.prototype.rmSame=function(){ //this--ary数组 var obj={};//如果对象中没有,给对象添加,如果有了,说明数组中重复了,删除这一项,同时预防数组塌陷; for(var i=0; i<this.length; i++){ var cur=this[i]; if(obj[cur]===cur){ this.splice(i,1); i--; }else{ obj[cur]=cur; } } return this;//去重后的数组;预告:为了链式操作; }; ary.rmSame(); ary2.rmSame();
阅读全文
0 0
- JavaScript基础(十一)---- 面向对象的继承方法
- javascript 面向对象基础(四)面向对象的继承
- JavaScript面向对象继承方法
- JavaScript面向对象的方法实现继承:call方法
- 补基础之javascript面向对象-构造函数的继承
- javascript面向对象(十一)
- javascript:面向对象编程基础:继承
- javascript 面向对象编程基础:继承
- 面向对象基础十一
- javascript面向对象继承的三种方法
- javascript面向对象(继承)
- javascript基础:对象的继承、添加对象方法
- JavaScript基础——面向对象的程序设计(二)继承
- javaScript面向对象继承方法实现
- 面向对象的 Javascript 面向对象基础
- javascript面向对象实现方法(类的继承与多态)
- java基础:面向对象(继承中构造方法的关系)
- java基础:面向对象(继承中构造方法的注意事项)
- JPush极光推送服务器端API
- C++程序员学Java系列之十七:面向对象
- 从零搭建阿里云Web服务器
- JPush极光推送 Errcode含义
- fork后printf如何输出
- JavaScript基础(十一)---- 面向对象的继承方法
- Python图表绘制:matplotlib绘图库入门
- Spring + jdbc 时候碰到的 SpringProperties不存在 问题
- 学习爬虫基础-网页基础2
- Logistic回归算法实现
- 软件包无法下载情况下安装nfs
- webbench源码分析之main函数
- arcgis js api改进textSymbol不能显示多行的不足
- jquery中html(),text(),val()方法的区别