js oop中的三种继承方法

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         // 1.定义父类
 2         function Person(name,age){
 3             this.name = name;
 4             this.age = age;
 5             this.say = function(){
 6                 alert(this.name+":"+this.age);
 7             }
 8         }
 9         // 2.定义子类
10         function Student(no){
11             this.no = no;
12             this.add = function(a,b){
13                 alert(a+b);
14             }
15         }
16         function Programmer(lang){
17             this.lang = lang;
18             this.codding = function(){
19                 alert("我爱敲代码!敲代码使我快乐!");
20             }
21         }
22         // 3.通过原型给Object对象添加一个扩展方法。
23         Object.prototype.customExtend = function(parObj){
24             for(var i in parObj){
25                 // 通过for-in循环,把父类的所有属性方法,赋值给自己
26                    this[i] = parObj[i];
27             }
28         }
29
30         var p = new Person("小明","18");
31         var s = new Student("0001");
32         s.customExtend(p);//现在s继承了p的所有属性和方法。
33         console.log(s)
34
35         var pro = new Programmer("JavaScript");
36         pro.customExtend(p);
37         console.log(pro)
38         

二、使用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,....);
}

 1 function Person(name,age){
 2             this.name = name;
 3             this.age = age;
 4             this.say = function(){
 5                 alert("我叫:"+this.name+";今年:"+this.age+"岁");
 6             }
 7         }
 8 function Student(no,stuName,stuAge){
 9
10             this.no = no;
11             Person.call(this,stuName,stuAge);
12                  }
13 var stu = new Student(12,"zhangsan",14);
14         stu.say();
15
16         console.log(stu)

三、使用原型继承

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

 1 function Person(name,age){
 2             this.name = name;
 3             this.age = age;
 4             this.say = function(){
 5                 alert("我叫:"+this.name+";今年:"+this.age+"岁");
 6             }
 7         }
 8 function Student(no){
 9             this.no = no;
10         }
11
12         Student.prototype = new Person("张三",14)
13
14         var stu = new Student(12);
15
16         stu.say();
17
18         console.log(stu)

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

时间: 2024-10-11 22:27:04

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

C++中的三种继承方式

1,被忽略的细节: 1,冒号( :)表示继承关系,Parent 表示被继承的类,public 的意义是什么? 1 class Parent 2 { 3 4 }; 5 6 class Child : public Parent 7 { 8 9 }; 2,有趣的问题: 1,是否可以将继承语句中的 public 换成 protected 或者 private?如果可以,与 public 继承有什么区别? 3,有趣的尝试编程实验: 1 #include <iostream> 2 #include &l

JS原型链与几种继承方法的对比

继承的方式有两种:接口继承.实现继承接口继承:即虚函数,父类只定义接口,不具体实现子类继承接口,自己负责实现这个方法,运行时动态决定调用哪个实现.实现继承:父类实现的方法,子类可以直接调用 JS中只支持实现继承,以原型链来实现. 回顾一下构造函数.原型.实例的关系:每个构造函数都有一个原型对象,原型对象又都包含一个constructor指针指向构造函数,实例包含一个_proto_内部属性指向原型对象. 继承的实现方法(父类型叫Parent,子类型叫Child)原本Child.prototype

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

一.直接通过PropertiesConfiguration来根据key读取value.二.将SuperDiamond配置参数注入spring配置文件,使用Spring来加载.三. 在Spring中配置SuperDiamond(无参数),然后通过RunTime参数来加载SuperDiamond配置. 1.直接读取如下:       @Test public static void test_simple(){ PropertiesConfiguration config = new Propert

C++面向对象中的三种继承方式

公有继承 基类的public和protected成员的访问属性在派生类中保持不变,但基类的private成员不可直接访问. 派生类中的成员函数可以直接访问基类中的public和protected成员,但不能通过直接访问基类的private成员. 通过派生类的对象只能访问基类的public成员. 私有继承 基类的public和protected成员都以private身份出现在派生类中,但基类的private成员不可直接访问. 派生类中的成员函数可以直接访问基类中的public和protected成

JS面向对象(3) -- Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法

相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对象之间的赋值,for...in语句,delete使用,成员方法,json对象的使用,prototype的使用,原型继承与原型链 JS面向对象(3) -- Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法 1.Object类 在JS中,Object是所有类的基

js的三种继承方式及其优缺点

第一种,prototype的方式: //父类 function person(){ this.hair = 'black'; this.eye = 'black'; this.skin = 'yellow'; this.view = function(){ return this.hair + ',' + this.eye + ',' + this.skin; } } //子类 function man(){ this.feature = ['beard','strong']; } man.pr

android开发中监听器的三种实现方法(OnClickListener)

Android开发中监听器的实现有三种方法,对于初学者来说,能够很好地理解这三种方法,将能更好地增进自己对android中监听器的理解. 一.什么是监听器. 监听器是一个存在于View类下的接口,一般以On******Llistener命名,实现该接口需要复写相应的on****(View v)方法(如onClick(View v)). 二.监听器的三种实现方法 (以OnClickListener为例) 方法一:在Activity中定义一个内部类继承监听器接口(这里是OnClickListener

Android中常用的三种存储方法浅析

Android中常用的三种存储方法浅析 Android中数据存储有5种方式: [1]使用SharedPreferences存储数据 [2]文件存储数据 [3]SQLite数据库存储数据 [4]使用ContentProvider存储数据 [5]网络存储数据 在这里我只总结了三种我用到过的或即将可能用到的三种存储方法. 一.使用SharedPreferences存储数据 SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置信息比如窗口状态,它的本质是基

Jquery中each的三种遍历方法

Jquery中each的三种遍历方法 $.post("urladdr", { "data" : "data" }, function(data) { $.each(data, function(n,value) { });}); 1.选择器+遍历 $('div').each(function (i){ i就是索引值 this 表示获取遍历每一个dom对象 }); 2.选择器+遍历 $('div').each(function (index,dom