您的位置:首页 > Web前端 > JavaScript

关于JavaScript那些事

2014-11-23 23:53 211 查看
Javascript 通常情况下都被误解了,有人说是有各种bug,有人说支持面向对象很垃圾,还有人说是c和self ONS的产物->可笑

JavaScript是一门很优秀的语言,脱胎于lisp,又轻量级的支持了数据封装,走duck type路线,hash literal表示对象,这也就自然支持了反射机制;

JavaScript支持的原型链很大程度上倾向于组合而不是继承,从而实现了模块间的解耦。

JavaScript常用的面向对象封装模式:

var Obj = function (name) {
this.name = name;
this.flag = new Array('A', 'B');
}
Obj.prototype = {
showName : function () {
alert(this.name);
}
}
var obj1 = new Obj();
var obj2 = new Obj();

obj1.flag.push('C');

alert(obj1.flag); // A,B,C
alert(obj2.flag); //A,B
alert(obj1.showName());
----------------------------cut-off-rule--------------------------------
var Obj = function () {
function initialize (name) {
this.name = name;
this.flag = new Array('A', 'B');
}
initialize.prototype = {
showName : function () {
alert(this.name);
},
showFlag : function () {
alert(this.flag);
}
}
return initialize;
}();

var obj1 = new Obj('aaa');
var obj2 = new Obj('bbb');
obj1.showName(); // aaa
obj2.showName(); // bbb
obj1.showFlag(); // AB

JavaScript闭包:获取函数上下文信息,也常用来数据封装

var db = (function() {
// 创建一个隐藏的object, 这个object持有一些数据
// 从外部是不能访问这个object的
var data = {};
// 创建一个函数, 这个函数提供一些访问data的数据的方法
return function(key, val) {
if (val === undefined) { return data[key] } // get
else { return data[key] = val } // set
}
// 我们可以调用这个匿名方法,返回这个内部函数,它是一个闭包
})(); // 利用函数作用域创建私有空间

db('x'); // 返回 undefined
db('x', 1); // 设置data['x']为1
db('x'); // 返回 1
// 我们不可能访问data这个object本身,但是我们可以设置它的成员
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: