关于JS继承的一些浅见

广义上的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(子类构造函数函数)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值