JavaScript 设计风格&模式 概览 20140418
2014-04-18 11:31
295 查看
基本的概念
在JavaScript中,一旦定义好一个变量,该变量会自动成为内置对象的一个属性,(如果该变量是全局变量,那么会成为全局对象的一个属性)。
定义的变量实际上也是一个伪类,拥有自身的属性,
该属性决定了该变量是否可以被修改、被删除和使用for-in枚举,
在ES3中没有直接对外提供,在ES5中提供了进行操纵这些属性的方法。
ES5新增了strict模式,该模式表明从JavaScript中移除某些特性。
该模式通过一个普通的字符串"use strict"来触发。
隐含全局变量和明确定义全局变量的区别
使用var创建的全局变量不能使用delete删除。不使用var创建的隐含全局变量可以使用delete删除,实际上是申明了上下文对象的一个属性。
实际上是通过ES3称为DontDelete,ES5称为Configurable的特性来描述该变量是否可以被删除。
隐含全局变量严格来讲不是真正的变量,而是全局对象的属性,属性可以通过delete操作符删除。
<!DOCTYPE html> <html> <head> <meta http-equiv=Content-Type content="text/html;charset=utf-8"></meta> <script type="text/javascript"> var g_var1 = 1; g_var2 = 2; (function(){ g_var3 = 3; }); delete g_var1; delete g_var2; delete g_var3; console.log(typeof g_var1); // number console.log(typeof g_var2); // undefined console.log(typeof g_var3); // undefined </script> </head> <body></body> </html>
如果直接将如上的代码放在FireBug下测试会有不同的结果,切记FireBug不能完全模拟执行环境。
具体的关于delete操作符的更多详细信息,参考 未完成 。
使用字面量或内置构造函数创建对象
最简单的字面量{}对象也具有Object.prototype继承的属性和方法。通过Object构造函数创建的对象,在创建的时候存在一个作用域解析的问题,
解析器要从调用Object()的位置开始沿着作用于链向上查找Object构造函数,存在效率问题。
当用new操作符调用构造函数时,构造函数总是返回一个对象,默认是返回this指向的对象,
除非通过return返回一个其他对象(若return返回的不是对象,则返回的还是this)。
相关文章推荐
- javascript继承&设计模式&面向对象
- [必读免费新电子书]:JavaScript和jQuery基本设计模式(Essential JavaScript & jQuery Design Patterns For Beginners) 最后编辑:2010-11-16 18:15
- 设计模式概览
- "围观"设计模式(10)--创建型之原型模式(Prototype Pattern)
- <<Javascript模式>>中的九大设计模式
- 深度体验Javascript 模块设计模式
- 深入理解JavaScript系列(38):设计模式之职责链模式
- 【JS设计模式】JavaScript特性
- Web页面上工作流设计器(silverlight/Flex/Javascript/java Workflow&
- 设计模式之单例设计模式(饿汉单例设计模式&懒汉单例设计模式)
- 浅学设计模式之桥接<bridge>模式
- 浅学设计模式之状态<state>模式
- javascript设计模式学习之八_发布订阅(观察者)模式
- 浅学设计模式之适配器<Adapter>模式 .
- 深入理解JavaScript系列(30):设计模式之外观模式
- 设计模式、用Delphi实现---->Wrapper pattern
- 深入理解JavaScript系列(44):设计模式之桥接模式
- 第五章 --- 关于Javascript 设计模式 之 发布-订阅模式
- 设计模式之单例模式:懒汉&饿汉
- 深入理解JavaScript系列(28):设计模式之工厂模式