首页 > 其他 > 详细

20 继承

时间:2019-06-10 17:04:16      阅读:84      评论:0      收藏:0      [点我收藏+]
继承
     能继承什么东西:
		构造函数、以及原型中的所有东西
     原型继承实现方式就是:
		1、定义新的构造函数,并在内部用call()调用希望“继承”的构造函数,并绑定this;(仅需继承构造函数时需要)
		2、借助中间函数F实现原型链继承,最好通过封装的inherits函数完成;
		3、继续在新的构造函数的原型上定义新方法。

      有原型对象时继承
		Object.create()方法可以传入一个原型对象,并创建一个基于该原型的新对象,但是新对象什么属性都没有,因此,我们可以编写一个函数来创建xiaoming
		// 原型对象:
		var Student = {
			name: ‘Robot‘,
			height: 1.2,
			run: function () {
				console.log(this.name + ‘ is running...‘);
			}
		};

		function createStudent(name) {
			// 基于Student原型创建一个新对象:
			var s = Object.create(Student);
			// 初始化新对象:
			s.name = name;
			return s;
		}

		var xiaoming = createStudent(‘小明‘);
		xiaoming.run(); // 小明 is running...
		xiaoming.__proto__ === Student; // true

         仅有构造函数时继承
  修改原型链上的继承关系
		function inherits(Child, Parent) {
			var F = function () {};
			F.prototype = Parent.prototype;
			Child.prototype = new F();
			Child.prototype.constructor = Child;
		}
		
		function Student(props) {
			this.name = props.name || ‘Unnamed‘;
		}

		Student.prototype.hello = function () {
			alert(‘Hello, ‘ + this.name + ‘!‘);
		}

		function PrimaryStudent(props) {
			Student.call(this, props);
			this.grade = props.grade || 1;
		}

		// 实现原型继承链:
		inherits(PrimaryStudent, Student);

		// 绑定其他方法到PrimaryStudent原型:
		PrimaryStudent.prototype.getGrade = function () {
			return this.grade;
		};
class继承
	一个class:
		class Student {
				constructor(name) {
					this.name = name;
				}

				hello() {
					alert(‘Hello, ‘ + this.name + ‘!‘);
				}
			}
	class继承:
	class PrimaryStudent extends Student {
			constructor(name, grade) {
				super(name); // 记得用super调用父类的构造方法!
				this.grade = grade;
			}

			myGrade() {
				alert(‘I am at grade ‘ + this.grade);
			}
		}

  

  

20 继承

原文:https://www.cnblogs.com/xuanjian-91/p/10998056.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!