关于JS继承的一些浅见

it2022-05-05  132

广义上的js继承:

如果能通过某种方式,让某个对象访问到其他对象中的属性、方法,那么我们就把这种方式称之为继承

一. 拷贝继承

+我们来用代码实现一下拷贝继承

//1、已经拥有一个对象 var o4 = {}; var o3 = {gendar:"男","grade:"初三",group:"第五组",name:"张三"} //2、创建一个对象的拷贝(克隆)for,,in循环 //a、去除对象中的每一个属性 for(var key in o3){ //b、获取到对应的属性值 var value = o3[key]; //c、吧属性值放到另一个对象中 o4[key] = value;在这里插入代码片 }

+我们也可以修改克隆对象,把属性修改:

o4.name = "李四"; //es6中有了<对象扩展运算符>: var source = {gendar:"男",“grade:"初三",group:"第五组",name:"张三"}; var target = {...source} var target2 = {...source,age:18}

二. 原型式继承

+场景: 1、创建一个纯洁对象(什么属性都没有)

function person(){}; var p1 = new person(); //此时控制台输出两个对象都是undefind //person对象里面只有一个_proto_属性

+所以纯洁对象并不代表里面什么都没有 +那么里面什么都没有的对象怎么声明呢?也就是空对象

var obj = Object.create(null);

+创建一个继承自某个父对象的子对象

var parent = {age:19,gener:"男"}; var student = Object.create(parent); //student._proto_===parent //...

三. 借用构造函数实现继承

+场景:使用于两种构造函数之间逻辑有相似的情况
+原理:函数call、apply调用方式
function Animal(name,age,gender){ this.name = name; this.age = age; this.gender = gender; } function Person(name,age,gender,say){ this.name = name; this.age = age; this.gender = gender; this.say = function(){ }; }
+使用构造函数实现:
function Animal(name,age,gender){ this.name = name; this.age = age; this.gender = gender; } function Person(name,age,gender,say){ //这种函数的调用方式,函数内部的this只能指向window Animal(name,age,gender); //目的:将Animal函数内部的this只想Person实例 Animal.call(this,name,age,gender) //上面代码等价于 Animal.apply(this,[name,age,gebder]); this.say = function(){ }; } var p1 = new Person("宋小宝",15,"男",function(){});
+局限性:Animal(父类构造函数)的代码必须完全适用于person(子类构造函数函数)

最新回复(0)