老师有疑问

来源:2-5 音乐播放器类实例

洋芋儿泥

2020-05-04 11:04:20

这种创建class构造函数的放放,和混合模式构造函数有什么区别呢,都是面向对象。之后写代码怎么去选择呢,他们的优劣在哪儿

写回答

1回答

樱桃小胖子

2020-05-05

同学你好,关于同学的问题解答如下:

1、es5中,生成实例对象通过构造函数来生成:

function Fun(a,b) {
    this.a = a;
    this.b = b;
}
Fun.prototype.showA = function () {
    console.log(this.a)
}
var fun = new Fun(1,2);
fun.showA();//1

2、es6则引用了class的概念,使得更接近java、c++等语言,更加直观。

class Fun {
    constructor(a,b){
        this.a = a;
        this.b = b;
    }
    showA() {
        console.log(this.a);
    }
}
var fun = new Fun(1,2);
fun.showA();//1

这两种写法是一样的,在es6中,class可以理解为一个语法糖,只是让这种写法更加直观。

3、与混合模式构造函数的区别

(1)混合模式中构造函数模式用于定义实例属性,而原型模式用于定义方法和共享属性。每个实例都会有自己的一份实例属性,但同时又共享着方法,最大限度的节省了内存。另外这种模式还支持传递初始参数。优点甚多。这种模式在ECMAScript中是使用最广泛、认同度最高的一种创建自定义对象的方法。

(2)构造函数虽然好用,但使用构造函数的最大的问题在于每次创建实例的时候都要重新创建一次方法(理论上每次创建对象的时候对象的属性均不同,而对象的方法是相同的),然而创建两次完全相同的方法是没有必要的。

但是实际开发中,具体如何选择,需要根据实际情况进行选择。这个是没有固定的选择标准的。

祝学习愉快!

0

0 学习 · 10739 问题

查看课程