《JavaScript设计模式》读书笔记(一)——函数怎么写才好

  当我阅读到这本书的时候,ES6已经出了,最新的教程应该是JS现代编程。虽然书中仍是旧时的编码风格,但不妨碍咱们获取思想。对于书中的代码,我会按照我本身的理解写出来。编程

从一个例子提及

如今你要完成一个表单验证任务(用户名,邮箱,密码)
像下面这样写固然没错:函数

    function checkName() {
        //验证姓名
    }

 

但这样写存在被别人写的同名方法覆盖的风险,你应该把他们放在类里面this

 let CheckObject = {

        checkName  () {
            //验证姓名
            return this;
        },
        checkEmail  () {
            //验证邮箱
            return this
        },
    }
    CheckObject.checkName().checkEmail();
 /*你也能够这样写
    let CheckObject = function () {};
    CheckObject.prototype={
        checkName:function () {
            //验证姓名
        },
        checkEmail:function () {
            //验证邮箱
        },
    }
    */

书写函数尽可能将其封装在类里面,由于你在工做中考虑的就不是你一我的写代码了,应该要考虑会不会影响到别人。编码

返回this可让其链式调用,方便咱们的使用。spa

值得一提的是,js里的this与Java中的不一样prototype

JS中的this

在JS里,this可用于任何函数(箭头函数没有本身的this),不受限制。它的值在代码运行时计算出来,取决于上下文。
须要警戒的是像下面这样调用code

let user = {
  name: "John",
  hi() { alert(this.name); }
}

// 将赋值与方法调用拆分为两行
let hi = user.hi;
hi(); // 错误,由于 this 未定义

你可能会说,这我确定会注意呀。但换成下面这样你可能就不太容易看出来了对象

let user = {
  name: "John",
  hi() { alert(this.name); },
  bye() { alert("Bye"); }
};

user.hi(); // John(简单的调用工做正常)

// 如今咱们要根据 name 来决定调用 user.hi 仍是 user.bye。
(user.name == "John" ? user.hi : user.bye)(); // 报错!

为啥会报错,由于this在传的时候没了,你至关于定义了一个新对象去调用它,它与user是不一样的,彻底独立,因此他没有this。blog

“旧时”的Var

var与let其实大致同样,但var没有块级做用域。什么意思呢?就是你若是不是在函数里声明的变量,那么他们都是全局变量。用var声明的变量只有函数做用域与全局做用域。教程

 function sayHi() {
        //等同于在最上面 var phrase
        phrase = "Hello";
        alert(phrase);
        var phrase;
    }
    sayHi();
    alert(phrase)//undef 找不到了,函数做用域里面的看不到了
    if(true)
    {
        var phrase="Hello"
    }
    alert(phrase);//还在
相关文章
相关标签/搜索