JavaScript 函数,面向对象?

在我的印象中,js 函数貌似这样

function fun(){
    // todo:
}

或者这样

const fun = function(){
    // todo:
}

一种是函数式,一种是变量声明式,若一场景,是做一个表单校验功能,你可能会写

const checkName = function(){
    // todo:
}

const checkPwd = function(){
    // todo:
}

const checkEmail = function(){
    // todo:
}
...

这样写,当然,功能是实现了,但是这样不外乎会在内存中多开辟了不必要的空间,我们实际上可以这样来写

const checForm = {
    checkName(){
        // todo:
    },
    checkPwd(){
        // todo:
    },
    checkEmail(){
        // todo:
    },
    ...
}

这样,我们使用一个对象来存储校验的一些方法,使用 checkForm.checkName() 就行,可以作为一个通用的方法(公共方法),不单单是登录,任何需要用到校验的地方都可以引入使用,但是又有问题,若当前不满足时,动态的添加一个 checkForm.checkPhone = function () { // todo: } 这样会影响到全局,因为是同一个对象来的 下面这种方式也同样会面临这种问题

const checkForm = function(){
    this.checkName = () => {
        // todo:
    }
    this.checkEmail = () => {
        // todo:
    }
    ...
}

但是我们可以这样来写:

cosnt checkForm = function(){}
checkForm.prototype = {
    checkName(){
        // todo:
    },
    checkEmail(){
        // todo:
    },
    ...
}

这种方式就避免了上述情况,可以这样使用

const checkA = new checkForm()
checkA.checkName()
checkA.checkPhone = function() {
    // todo:
}

const checkB = new checkForm()
checkB.checkName

// 此处的 checkA 与 checkB 是不影响的,这样就避免了数据污染,有更好的扩展性

有人不知道 Function.xxx 与 Function.prototype.xx 的区别,实际上 prototype 是对象原型上的,不论你通过 new 实例化多少次,prototype 是不变的, Function.xx 这种方式挂载的函数或变量属于静态私有变量,通过 new 实例化是访问不到的 只能通过 Function.xx 的方式访问‍♀️

你可能感兴趣的:(笔记,javascript,前端,开发语言)