当我阅读到这本书的时候,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可用于任何函数(箭头函数没有本身的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与let其实大致同样,但var没有块级做用域。什么意思呢?就是你若是不是在函数里声明的变量,那么他们都是全局变量。用var声明的变量只有函数做用域与全局做用域。教程
function sayHi() { //等同于在最上面 var phrase phrase = "Hello"; alert(phrase); var phrase; } sayHi(); alert(phrase)//undef 找不到了,函数做用域里面的看不到了 if(true) { var phrase="Hello" } alert(phrase);//还在