300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 借用构造函数 组合继承 拷贝继承 总结继承

借用构造函数 组合继承 拷贝继承 总结继承

时间:2021-04-21 18:26:57

相关推荐

借用构造函数 组合继承 拷贝继承 总结继承

借用构造函数

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Document</title><script>// function Person(name,age,sex,weight){//this.name = name;//this.age = age;//this.sex = sex;//this.weight = weight;// }// Person.prototype.sayHi = function(){//console.log("您好");// };// function Student(score){//this.score = score;// }// // 希望人的类别中的数据可以共享给学生----继承// Student.prototype = new Person("小明",10,"男","50kg");// var stu1 = new Student(100);// console.log(stu1.name,stu1.age,stu1.sex,stu1.weight,stu1.score);// stu1.sayHi();// var stu2 = new Student(120);// stu2.name = "张三";// stu2.age = 20;// stu2.sex = "女";// console.log(stu2.name,stu2.age,stu2.sex,stu2.weight,stu2.score);// stu2.sayHi();// var stu4 = new Student(150);// console.log(stu4.name,stu4.age,stu4.sex,stu4.weight,stu4.score);// stu4.sayHi();// 为了数据共享,改变原型指向,做到了继承----通过改变原型指向是实现的继承// 缺陷:因为改变原型指向的同时实现继承,直接初始化了属性,// 继承过来的属性的值都是一样的,所以,这就是问题// 只能重新调用对象的属性进行重新赋值// 解决方案:继承的时候,不用改变原型的指向,直接调用父级的构造函数的方式来// 为属性赋值就可以了----借用构造函数:把要继承的父级的构造函数拿过来,使用// 一下就可以了// 借用构造函数:构造函数名字.call(当前对象,属性,属性,.....)// 解决了属性继承,并且值不重复的问题// 缺陷:父级类别中的方法不能继承function Person(name,age,sex,weight){this.name = name;this.age = age;this.sex = sex;this.weight = weight;}Person.prototype.sayHi = function(){console.log("您好");};function Student(name,age,sex,weight,score){Person.call(this,name,age,sex,weight);this.score = score;}var stu1 = new Student("小明",10,"男","10kg",100);console.log(stu1.name,stu1.age,stu1.sex,stu1.weight,stu1.score);var stu2 = new Student("小红",20,"女","40kg",120);console.log(stu2.name,stu2.age,stu2.sex,stu2.weight,stu2.score);var stu4 = new Student("小丽",50,"男","80kg",150);console.log(stu4.name,stu4.age,stu4.sex,stu4.weight,stu4.score);</script></head><body></body></html>

组合继承

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Document</title><script>// 原型实现继承// 借用构造函数实现继承// 组合继承:原型继承+借用构造函数继承function Person(name,age,sex){this.name = name;this.age = age;this.sex = sex;}Person.prototype.sayHi = function(){console.log("hello");};function Student(name,age,sex,score){// 借用构造函数:属性值重复的问题Person.call(this,name,age,sex);this.score = score;}// 不传值// 改变原型指向----继承Student.prototype = new Person();Student.prototype.eat = function(){console.log("吃东西");};var stu = new Student("小黑",20,"男","100分");console.log(stu.name,stu.age,stu.sex,stu.score);stu.sayHi();stu.eat();// 属性和方法都被继承了var stu2 = new Student("小白",20,"女","100分");console.log(stu2.name,stu2.age,stu2.sex,stu2.score);stu2.sayHi();stu2.eat();</script></head><body></body></html>

拷贝继承

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Document</title><script>// 拷贝继承:把一个对象中的属性和方法直接复制到另一个对象中// var obj1 = {//name:"小糊涂",//age:20,//sleep:function(){// console.log("睡觉了");//}// };// 改变了地址的指向// var obj2 = obj1;// console.log(obj2.name,obj2.age);// obj2.sleep();// 拷贝继承:把一个对象中的属性和方法直接复制到另一个对象中// var obj1 = {//name:"小糊涂",//age:20,//sleep:function(){// console.log("睡觉了");//}// };// // 改变了地址的指向// var obj2 = {};// for(var key in obj1){//// obj2.name = obj1.name;//obj2[key] = obj1[key];// }// console.log(obj2.namefunction Person(){}Person.prototype.age = 10;Person.prototype.sex = "男";Person.prototype.height = 100;Person.prototype.play = function(){console.log("玩的好开心");};var obj2 = {};// Person的构造中有原型prototype,prototype就是一个对象,那么里面的age,sex// height,play都是该对象中的属性和方法for(var key in Person.prototype){obj2[key] = Person.prototype[key];}console.dir(obj2);obj2.play();</script></head><body></body></html>

总结继承

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Document</title><script>// 面向对象特性:封装,继承,多态// 继承,类与类之间的关系,面向对象的语言的继承是为了多态服务的// js不是面向对象的语言,但是可以模拟面向对象.模拟继承.为了节省内存空间// 继承:/*** 原型作用:为了节省内存空间,数据空间,目的是为了节省空间* 原型作用:继承 目的是:节省内存空间* * 原型继承:改变原型指向* 借用构造函数继承:主要解决属性的问题* 组合继承:原型继承+借用构造函数继承* 既能解决属性问题,又能解决方法问题* 拷贝继承:就是把对象中需要共享的属性或者方法,直接遍历的方式复制到另一个* 对象中* * */</script></head><body></body></html>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。