ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

继承及apply、call、bind的区别

2021-08-24 20:30:31  阅读:168  来源: 互联网

标签:name 子类 原型 call bind apply eat


1.函数对象的相关属性和方法

prototype:原型对象,它是函数的一个属性(通过这个函数指向构造方法)

作用:存储着该类的实例对象共有的方法或者属性

_proto_:所有实力对象拥有的属性,作用为找到该类的原型对象,从而实现可以使用原型对象的方法或者属性

原型对象的属性是不可以通过实力对象修改的

如果实力对象修改了原型对象的属性,效果等价于添加了一个同名的自定义属性

2.apply、call也是改变函数的this指向

作用为解耦

function Snake(name){
		this.name = name;
	}
	
	function Monkey(name){
		this.name = name;
	}
	
	function eat(food1,food2){
		console.log(this.name + "eat:" + food1,food2);
	}
	
	let s = new Snake("小青");
	let m = new Monkey("熏悟空");
	
	//eat.call(this指向,eat的实际参数);
	eat.call(s,"青蛙","老鼠");
	eat.call(m,"桃子","香蕉");
	eat.apply(s,["青蛙","老鼠"]);
	eat.apply(m,["桃子","香蕉"]);
	eat.bind(s,"1","2")();

apply、call、bind的区别

1.全部改变this指向

2.apply、call针对匿名函数,bind针对匿名函数

3.apply、call直接调用函数  /  bind等价绑定函数,还需要将绑定的结果进行调用

4.apply的参数需要用[ ]括起来,call不需要

原型继承:

规则:将子类的原型指向父类的实例化对象

作用:可以通过子类的对象,直接访问父类的属性和方法

typeof和instanceof区别

typeof 是一个操作符,主要的目的是检测一个变量是不是基本数据类型的变量,同时也可以说是确定一个变量是字符串,数值,布尔值,还是undefined的最佳工具

typeof返回的类型有六种:“number”,“string”,“boolean”,“object”,以及“function”和“undefined”

instanceof主要目的是检测引用类型,判断对象是Array,还是RegExp!

typeof和instanceof的目的都是检测变量的类型,两个的区别在于typeof一般是检测的基本数据类型,instanceof主要检测的是引用类型

原型链继承的注意事项

1.必须先实现继承关系,再为子类添加原型方法或者属性,否则会被覆盖

2.所有由父类派生给子类的属性都是无法初始化的

3.一旦继承关系实现后,子类的原型对象不能发生改变

ES6继承

extends实现继承的关键字

super借用父类的构造方法    注意:super必须放在子类构造方法的第一行

class Human{
		constructor(name,id) {
		    this.name = name;
			this.id = id;
		}
		
		eat(){
			console.log("Human eat");
		}
	}
	
	//extends实现继承的关键字
	class Student extends Human{
		constructor(name,id,score) {
		    //super借用父类的构造方法
			//注意:super必须放在子类构造方法的第一行
			super(name,id);
			this.score = score;
		}
		
		study(){
			console.log("Student study");
		}
	}
	
	let s = new Student("凢凢",2,100);
	console.log(s.id,s.name,s.score);
	s.eat();
	s.study();

标签:name,子类,原型,call,bind,apply,eat
来源: https://blog.csdn.net/m0_59023730/article/details/119897330

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有