面向对象的封装继承多态以及构造函数

Posted lishixiang-007

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象的封装继承多态以及构造函数相关的知识,希望对你有一定的参考价值。

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:
<script>
window.username = "lili";
var person =
  username: "leson"
  function say(userage,hobby)
  alert(this.username + "今年" + userage + "岁喜欢"+hobby);

say.call(person, 18,"篮球");//say里面的this 指向call里面的第一个参数
</script>

<script>
window.username = "lili";
var person =
  username: "leson"

function say(userage,hobby)
  alert(this.username + "今年"+userage+"岁喜欢"+hobby);

say.apply(person,[18,"篮球"]);//say里面的this 指向apply里面的第一个参数
</script>

三种继承方式:
构造函数 使用原型
普通对象 使用内部原型
普通函数 使用call/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里面的第一个参数


 

以上是关于面向对象的封装继承多态以及构造函数的主要内容,如果未能解决你的问题,请参考以下文章

JS面向对象三大特征:封装、继承、多态

TypeScript,面向对象,类、构造函数、继承、抽象类、接口和封装

面向对象(封装,继承,多态)

面向对象的三大特性---封装继承多态

js构造函数--面向对象

前端 JavaScript 设计模式前奏--面向对象-封装继承多态