js面向对象

面向对象:

面向对象编程思想,把事物分解成一个个对象,然后由对象分工与合作,每一个函数,

一定会有一个原型,属性的选择性放在实例化的对象中,函数写在原型上。

面向对象,具有更好的灵活性,代码可服用,容易维护和开发。

具有封装性(低耦合,高内聚),继承性(子类继承父类中的一些属性和方法),多态性(重载)。

面向对象的思维特点:

  抽取对象共用的属性和方法封装成一个类

  对类进行实例化,获取类的对象,每实例化一次就产生一个新的对象

 

constructor属性
1.每个对象在创建时都会自动拥有一个构造函数属性constructor

2.constructor是通过继承关系继承下来的,当前实例的对象父类就是__proto__,

里面就有constructor属性,它继承了原型对象,constructor指向了当前的构造函数

3.constructor属性表示原型对象和构造函数之间的关联关系

class Name {
    constructor(uname) {
        // 方法体
        this.uname = uname;
    }
}
var name = new Name('啊啊啊');
console.log(name.uname);
// 输出:啊啊啊

 

原型对象 (prototype)

  1. 构造方法的问题:浪费内存的问题,复杂数据类型 (例如函数) 他会另外开辟一个内存空间存相同的数据

         2.为了解决这个问题,每个构造函数都会有一个自带的对象 prototype,我们可以把那些不变的方法直接定

           义在 prototype 上,所有的对象可以共享这些方法

 

function Star(uname, age) {
    // 变量
    this.uname = uname;
    this.age = age;
}
// 原型对象里的方法
Star.prototype.sing = function() {
    console.log('我会唱歌');
}

 

call 函数

call 可以调用函数,call 改变函数的 this 指向 (第一个参数代表函数的 this 指向,后面的参数代表传递参数)

用 call 函数来调用父构造函数,但是需要把父构造函数里面的 this 都变为子构造函数的 this

function Father(uname, age) {
    // this 指向 Father
    this.uname = uname;
    this.age = age;
}
function Son(uname, age) {
    // 使 Son 继承 Father 的属性
    Father.call(this, uname, age);
}

 

posted @ 2022-05-11 18:45  Lhaoyu  阅读(30)  评论(0编辑  收藏  举报