javascript基础之继承

实现继承的各种方法:
1、传统形式–>原型链
缺点:过多的继承了没用的属性
2、借用构造函数 -->利用call、apply(不算标准的继承模式)
缺点:

  • 不能继承借用构造函数的原型
  • 每次构造函数都要多走一个函数 -->浪费效率
			function Person(name,age,sex){
				this.name=name;
				this.age=age;
				this.sex=sex;
			}
			function Student(name,age,sex,grade){
				Person.call(this,name,age,sex);
				this.grade=grade;
			}
			var student=new Student();

3、共享原型(较好的一个继承方法)
缺点:不能随意改动自己的原型,改动son的属性,会影响到father的属性

			Father.prototype.name = 'zhang';

			function Father() {

			}

			function Son() {

			}
			Son.prototype = Father.prototype;//共享原型
			var son = new Son();
			var father = new Father();

先继承后使用
4、圣杯模式
在共享原型的基础上再加一个构造函数function F(){}当做中间层,然后让F和Father有一个共享原型F.prototype = Father.prototype,然后Son.prototype=new F();使用原型链形成了继承关系,现在改Son.prototype ,不会影响Father.prototype
封装一个继承函数inherit:

			function inherit(Target, Origin) {
				function F() {};
				F.prototype = Origin.prototype;
				Target.prototype = new F();
			}

			function Father() {

			}

			function Son() {

			}
			inherit(Son, Father);
			var son = new Son();
			var father = new Father();

son.proto–>new F().proto–>Father.prototype

var inherit=(function(){
				var F=function();
				return function (Target, Origin) {
				F.prototype = Origin.prototype;
				Target.prototype = new F();
				Target.prototype.constructor=Target;
				Target.prototype.uber=Origin.prototype;//超类
			}
			}());

上面的var F的这个F让其形成了闭包,成为了这个函数的私有化变量。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值