JS OOP 中的三种继承方法:

很多读者关于js opp的继承比较模糊,本文总结了oop中的三种继承方法,以助于读者进行区分。

<继承使用一个子类继承另一个父类,子类可以自动拥有父类的属性和方法。(继承的两方,发生在两个类之间)>

一、通过object实现继承

1:定义父类
function Parent(){}
2:定义子类
funtion Son(){}
3:通过原型给Object对象添加一个扩展方法。
Object.prototype.customExtend = function(parObj){
for(var i in parObj){
// 通过for-in循环,把父类的所有属性方法,赋值给自己
this[i] = parObj[i];
}
}
4:子类对象调用扩展方法
Son.customExtend(Parent);

         // 1.定义父类
function Person(name,age){
this.name = name;
this.age = age;
this.say = function(){
alert(this.name+":"+this.age);
}
}
// 2.定义子类
function Student(no){
this.no = no;
this.add = function(a,b){
alert(a+b);
}
}
function Programmer(lang){
this.lang = lang;
this.codding = function(){
alert("我爱敲代码!敲代码使我快乐!");
}
}
// 3.通过原型给Object对象添加一个扩展方法。
Object.prototype.customExtend = function(parObj){
for(var i in parObj){
// 通过for-in循环,把父类的所有属性方法,赋值给自己
this[i] = parObj[i];
}
} var p = new Person("小明","18");
var s = new Student("0001");
s.customExtend(p);//现在s继承了p的所有属性和方法。
console.log(s) var pro = new Programmer("JavaScript");
pro.customExtend(p);
console.log(pro)

二、使用call和apply进行继承

首先,了解一下call和apply:通过函数名调用方法,强行将函数中的this指向某个对象;
 call写法: func.call(func的this指向的obj,参数1,参数2...);
 apply写法: func.apply(func的this指向的obj,[参数1,参数2...]);
call与apply的唯一区别:在于接收func函数的参数方式不同。call采用直接写多个参数的方式,而apply采用是一个数组封装所有参数。
② 使用call和apply
1:定义父类
funtion Parent(){}
2:定义子类
function Son(){}
3:在子类中通过call方法或者apply方法去调用父类。
function Son(){
Parent.call(this,....);
}

 function Person(name,age){
this.name = name;
this.age = age;
this.say = function(){
alert("我叫:"+this.name+";今年:"+this.age+"岁");
}
}
function Student(no,stuName,stuAge){ this.no = no;
Person.call(this,stuName,stuAge);
}
var stu = new Student(12,"zhangsan",14);
stu.say(); console.log(stu)

三、使用原型继承

③ 使用原型继承
1:定义父类
function Parent(){}
2:定义子类
function Son(){}
3:把在子类对象的原型对象声明为父类的实例。
Son.prototype = new Parent();

 function Person(name,age){
this.name = name;
this.age = age;
this.say = function(){
alert("我叫:"+this.name+";今年:"+this.age+"岁");
}
}
function Student(no){
this.no = no;
} Student.prototype = new Person("张三",14) var stu = new Student(12); stu.say(); console.log(stu)

希望以上代码能够帮助读者解决继承的问题!

js oop中的三种继承方法的更多相关文章

  1. C++中的三种继承关系

    C++中的三种继承关系 先看类中声明成员时的三种访问权限 public : 可以被任意实体访问 protected : 只允许子类及本类的成员函数访问 private : 只允许本类的成员函数访问 在 ...

  2. SuperDiamond在JAVA项目中的三种应用方法实践总结

    SuperDiamond在JAVA项目中的三种应用方法实践总结 1.直接读取如下: @Test public static void test_simple(){ PropertiesConfigur ...

  3. js中的几种继承方法

    JS作为面向对象的弱类型语言,继承也是其非常强大的特性之一. 继承:子承父业:一个原本没有某些方法或属性的对象,统一写方法,拿到了另外一个对象的属性和方法 下面是js中的几种继承方式 1.改变this ...

  4. JavaScript 继承——三种继承方法及其优劣

    原文地址   本文内容 目的 继承的第一步--最简单的继承 私有变量/成员和原型 三种继承方式及其优劣 基本的原型继承 Yahoo JavaScript 模块模式 创建闭包的构造函数 三种方法的代码执 ...

  5. C++中的三种继承public,protected,private

    ( c++默认class是private继承且class内的成员默认都是private struct 默认位public 继承,struct内成员默认是public  ) 三种访问权限 public: ...

  6. java数组中的三种排序方法中的冒泡排序方法

    我记得我大学学java的时候,怎么就是搞不明白这三种排序方法,也一直不会,现在我有发过来学习下这三种方法并记录下来. 首先说说冒泡排序方法:冒泡排序方法就是把数组中的每一个元素进行比较,如果第i个元素 ...

  7. C++中的三种继承方式

    1,被忽略的细节: 1,冒号( :)表示继承关系,Parent 表示被继承的类,public 的意义是什么? class Parent { }; class Child : public Parent ...

  8. Python中class的三种继承方法

    class parent(object): def implicit(self): print("Parent implicit()") def override(self): p ...

  9. [转]C++中的三种继承public,protected,private

    链接:http://www.cnblogs.com/BeyondAnyTime/archive/2012/05/23/2514964.html

随机推荐

  1. Net系列框架-Dapper+简单三层架构

    Net系列框架-Dapper+简单三层架构 工作将近6年多了,工作中也陆陆续续学习和搭建了不少的框架,后续将按由浅入深的方式,整理出一些框架源码,所有框架源码本人都亲自调试通过,如果有问题,欢迎联系我 ...

  2. 反射导出 Excel

    /// <summary> /// List 数据导出Excel /// </summary> /// <param name="list">数 ...

  3. 关于linq的几个小例子

    private void button1_Click(object sender, EventArgs e) { ] { ,,,,,,}; var result0 = from num in numb ...

  4. 浅析C# Dictionary实现原理

    目录 一.前言 二.理论知识 1.Hash算法 2.Hash桶算法 3.解决冲突算法 三.Dictionary实现 1. Entry结构体 2. 其它关键私有变量 3. Dictionary - Ad ...

  5. Gzip压缩和解压

    /// <summary> /// 将传入字符串以GZip算法压缩后,返回Base64编码字符 /// </summary> /// <param name=" ...

  6. 为什么不能用Abort退出线程

    在使用线程时,如果线程还未结束直接退出线程很有可能会导致数据丢失. class threadAbort { static void Main(string[] args) { WriteMessage ...

  7. 记录一下将SqlLocalDb数据迁移到Sql Server Express2017的过程!

    当初为了开发方便,使用了SqlLocalDb,然后再测试期产生了很多有用的数据,客户说不能删除了.麻烦 先将数据库文件下载回来,然后安装SSMS,在连接数据库地址那里,填写“(LocalDB)\MSS ...

  8. 深入学习c++--智能指针(一) shared_ptr

    1. 几种智能指针 1. auto_ptr: c++11中推荐不使用他 2. shared_ptr: 每添加一次引用 就+1,减少一次引用,就-1:做到指针进行共享 3. unique_ptr: 一个 ...

  9. dfs找負環

    某些無良出題人可能會卡bfs找負環,所以要用dfs 核心代碼(以jzoj5173為例): #include<bits/stdc++.h> using namespace std; #def ...

  10. 关于finecms v5 会员头像 任意文件上传漏洞分析

    看到我私藏的一个洞被别人提交到补天拿奖金,所以我干脆在社区这里分享,给大家学习下 本文原创作者:常威,本文属i春秋原创奖励计划,未经许可禁止转载! 1.定位功能 下载源码在本地搭建起来后,正常登陆了用 ...