摘要:面向对象特点封装继承多态。直接赋值可以继承原型对象对象复制可以继承原型对象把父类的方法改写叫方法重载。说我好累添加属于自己的方法叫多态。
1、面向对象特点:封装、继承、多态。
2、构造函数 = 构造器 + 原型对象;
(1)父类
function UserClass(name,age,word){
//构造器 constructor this.name=name; this.age =age; this.word =word; this.init =function(){ return `${this.name} ----init初始化`; }
}
UserClass.prototype={
//原型对象 prototype 只能实例化之后才能调取 say(){ return `${this.name}---${this.age}----${this.word}`; }
}
module.exports = UserClass;
var u1 = new UserClass("大雷",18,"你们这些二傻子");
打印:你们这些二傻子 -- 大雷 -- init初始化
(2)子类
继承父类:call/apply 改变this指向来实现继承,两者参数不相同,功能相同。但无法继承原型对象。
var UserClass=require("./userClass");
function User(name,age,word,grade){
this.grade=grade; //UserClass.call(this,name,age,word); UserClass.apply(this,[name,age,word]);
}
//(1)直接赋值:可以继承原型对象
//User.prototype = new UserClass();
//(2)对象复制:可以继承原型对象
//for(var i in UserClass.prototype){
// User.prototype[i] = UserClass.prototype[i];
// }
User.prototype={
say(){ //把父类的say方法改写叫方法重载。 return `${this.name} 说:我好累`; }, walk(){ //添加属于自己的方法叫多态。 return "i am fly"; }
}
module.exports = User;
var u2 = new User("小明",22,"不存在的啊",100);
补充知识点:
var person = {
username: "人类", say: function () { alert(this.username + "你好");
}
}
var yellowPerson = {
__proto__: person, username: "黄种人",
};
(1)Object.prototype.username = "地球人";//可以使用大写的Object来实现继承
(2)yellowPerson.constructor.prototype === Object.prototype 结果为true
注意:yellowPerson.prototype.username = "地球人"; 普通对象不能使用原型来继承
打印: yellowPerson.say();
普通函数的继承call和apply:
window.username = "lili"; var person = { username: "leson" function say(userage,hobby) { alert(this.username + "今年" + userage + "岁喜欢"+hobby); } say.call(person, 18,"篮球");//say里面的this 指向call里面的第一个参数
window.username = "lili"; var person = { username: "leson" } function say(userage,hobby) { alert(this.username + "今年"+userage+"岁喜欢"+hobby); } say.apply(person,[18,"篮球"]);//say里面的this 指向apply里面的第一个参数
构造函数:使用的时候用new关键字实例化的函数
(1、构造函数就是一个类(object) 可以有属性和方法 里面的this就指向该构造函数
2、构造函数可以通过prototype来实现继承(补充自身扩展更多内容)
3、继承的时候就会产生原型链 自身-原型-Object Object没有就是undefined Object就是原型链的末端)
this的指向问题:函数属于谁就指向谁
1 window 当函数直接调用的时候 函数名前面什么都没有的时候 say();
2 object 指向函数的所有者 btn.onclick = function(){ }
3 构造函数 new Say() this就指向构造函数
4 call/apply里面的第一个参数
三种继承方式:
构造函数 使用原型
普通对象 使用内部原型
普通函数 使用call/apply
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/106118.html
摘要:实现多态的三个必要条件继承在多态中必须存在有继承关系的子类和父类。参考面试题解惑系列九继承多态重载和重写面向对象三大特性封装,继承,多态以及抽象接口的介绍 版权声明:本文由吴仙杰创作整理,转载请注明出处:https://segmentfault.com/a/1190000009141566 1. 面向对象编程的三大特性 Java 面向对象编程有三大特性:封装、继承、多态。 1.1 封装...
摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...
摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...
摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...
摘要:会造成内存浪费的问题构造函数继承声明父类声明子类生成实例组合式继承组合式继承是汲取了两者的优点,既避免了内存浪费,又使得每个实例化的子类互不影响。 写在前面 既然是浅谈,就不会从原理上深度分析,只是帮助我们更好地理解... 面向对象与面向过程 面向对象和面向过程是两种不同的编程思想,刚开始接触编程的时候,我们大都是从面向过程起步的,毕竟像我一样,大家接触的第一门计算机语言大概率都是C语...
阅读 3498·2023-04-25 15:52
阅读 580·2021-11-19 09:40
阅读 2569·2021-09-26 09:47
阅读 1021·2021-09-22 15:17
阅读 3546·2021-08-13 13:25
阅读 2197·2019-08-30 15:56
阅读 3459·2019-08-30 13:56
阅读 2094·2019-08-30 11:27