[JS] 原型和原型链的研究

文章讲述了JavaScript中的类继承机制,通过创建Person类并派生出Student和Teacher子类。讨论了函数、构造函数和方法的prototype属性,以及对象的__proto__属性,阐述了原型链的工作原理,从Person到Student,再到Object.prototype并最终指向null的连接。
摘要由CSDN通过智能技术生成

我的思路

1.首先创建一个Person,有name和age两个属性,还有一个skill()方=>(ok)
2.创建两个类Student继承Person,Teacher继承Person=>(ok)
3.Student有额外的属性nickName,有额外的方法playBasketball,打篮球=>(ok)
4.Teacher有额外的属性rank(rank是等级,资历的意思),有额外的方法deepStudy,深入研究=>(ok)
5.我们要解决:
	1.证明每一个函数都有prototype(翻译为原型或者雏形)属性=>确实,但是对象里面的函数除外(ok)
	2.构造函数有prototype吗?=>有
	3.普通方法有prototype吗?=>对象里面的方法没有prototype,而构造方法和写在script标签里面的普通方法都有prototype属性
	4.prototype是对象吗?=>是对象
	5.prototype可以继承吗=>可以
	6.所有对象(例如Student的实例student)都有__proto__属性=>确实
	7.student.__proto__ 就等于(也可说 指向) Person.prototype=>不对,student.__proto__等于Student.prototype
	8.Person.prototype是一个对象,对象就会有__proto__	=>确实
	9.Person.prototype.__proto__ 就等于(也可说 指向) Object.prototype =>确实
	10.Object.prototype是一个对象,然后对象就会有__proto__属性	=>确实
	11.Object.prototype.__proto__ 就等于 null	=>确实

1.首先创建一个Person,有name和age两个属性,还有一个skill()方法

		class Person {
			constructor(name, age) {
				this.name = name
				this.age = age
			}

			skill(skillType) {
				console.log(this.name+"会"+skillType)
			}
		}
		

2.创建两个类Student继承Person,Teacher继承Person

		class Student extends Person{
			constructor(name,age,nickName){
				super(name,age)		//调用父类构造方法
				this.nickName = nickName
			}
			
			playBasketball(){
				console.log(this.name+"打篮球两年半了")
			}
			
		}
		class Teacher extends Person{
			constructor(name,age,rank){
				super(name,age)
				this.rank = rank
			}
			deepStudy(){
				console.log(this.name+"总结了这些题目的规律")
			}
		}
		

3.Student有额外的属性nickName,有额外的方法playBasketball

4.Teacher有额外的属性rank(rank是等级,资历的意思),有额外的方法deepStudy,深入研究

5.我们要解决:

1.证明每一个函数都有prototype(翻译为原型或者雏形)属性

确实,但是对象里面的函数除外

let student = new Student("何同学",22,"小何")

在这里插入图片描述

2.构造函数有prototype吗?

有(如上)

3.普通方法有prototype吗?

对象里面的方法没有prototype,而构造方法和写在script标签里面的普通方法都有prototype属性

		let sayFunc = function say(){
			console.log("Hello World!")
		}

在这里插入图片描述

4.prototype是对象吗?

是对象

在这里插入图片描述

5.prototype可以继承吗

可以
在这里插入图片描述

6.所有对象(例如Student的实例student)都有__proto__属性

确实

7.student.proto 就等于(也可说 指向) Person.prototype

不对,student.__proto__等于Student.prototype

在这里插入图片描述

8.Person.prototype是一个对象,对象就会有__proto__

确实
在这里插入图片描述

9.Person.prototype.proto 就等于(也可说 指向) Object.prototype

确实

在这里插入图片描述

10.Object.prototype是一个对象,然后对象就会有__proto__属性

确实

在这里插入图片描述

11.Object.prototype.proto 就等于 null

确实

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值