聊聊JavaScript中的对象——是对象,不是“对象”!(二)

29 阅读2分钟

书接上文,之前我们讲了封装。

整个看完,如果是我,我就会想这不是***吗,搞了半天,和没写这些直接改有什么区别,何必多此一举呢?

实则不然,当我们不做任何限制,直接让对象的属性暴露,可以随意更改,此时我们就相对很被动,只能任由其他人改或者不改,但如果我们把对象属性改为私有属性,此时我们就对属性有选择的余地,该属性能不能让别人访问,让不让别人更改,我们都是可以控制的,另外对于更改的属性,我们也可以增加验证,去控制属性符合规范,这样是对我们程序开发是有极大好处的。

总而言之,封装,封装,装就是把属性方法装在对象,类里,封则可以理解为将对象类的属性封起来,想让别人访问时再打开。

多态

JavaScript是一门弱类型语言,什么是弱类型语言呢?

弱类型语言:弱类型语言是一种弱类型定义的语言,某一个变量被定义类型,该变量可以根据环境变化自动进行转换,不需要经过显性强制转换。

与之对应的是强类型语言。

强类型语言:强类型语言是一种强制类型定义的语言,一旦某一个变量被定义类型,如果不经过强制转换,则它永远就是该数据类型了。

正因为JavaScript是一门弱类型语言,其函数在传递参数时并不会去检查传过来参数的类型,这就意味着任何数据都可以作为一个函数的参数传递。你要调用某一个函数,只需要你传递过来的参数符合函数参数的某些特点即可。

class Person {
    constructor(name) {
        this.name = name;
    }
}
class Cat {
    constructor(name) {
        this.name = name;
    }
}
const p1 = new Person('haha')
const c1 = new Cat('miaomiao')
function sayHello(obj) {
    console.log('hello', obj.name);
}
sayHello(p1)
sayHello(c1)

多态的字面意思就是多种状态,同一操作作用于不同的对象上,可以产生不同的解释和不同的执行结果。

在该函数中,无论是Person类对象还是Cat类对象,都具有name属性,则他们都可以调用撒野hello方法,这也就实现了多态。

笔者认为,在JavaScript中的多态其实相对于比较牵强,因为JavaScript本身就是弱类型语言,其参数注定就具有多态这一属性,与其对象关联不大,而且在实际开发中,该多态也并不实用,可能就是为了符合面向对象的特点而产生的。