ckeditor 框架分析 几个核心“人物”
ckeditor代码中有几个核心的内容:
1. (function(){})();
2. prototype new 配合,继承属性方法
3. a.event.implementOn() 公共属性扩充
4. e.extend / a.tools.extend 自由扩充
5. a.on
6. j.add
1.(function(){})();
(function(){
//要运行的程序
})();
如此写法,能起到作用域作用;定义在中间的变量作用域被固定在这里,不会造成前后定义冲突。
定义时用var开头,作用域就在(function(){})();里了;如果没有var开头,作用域就超出,则像是全局变量了
只要加了var,即便与外界的变量重名也不会影响外界的变量。function F(){}定义,作用域也是在里面。F = function(){}则是全局了。
2.prototype new 配合,继承属性方法
这个是继承prototype的一个方法。
比如:
A = function(){}; //此处必须定义成函数
A.prototype = { //哈希
x1 : function(){alert(1)},
x2 : function(){alert(2)}
};
//A.x1(); //此处不起作用
B = new A();
B.x1(); //起作用
再看一例:
A = function(){};
A.prototype = {
x1 : function(){alert(1)},
x2 : function(){alert(2)}
};
A.x3 = function(){alert(3)};
A.x3(); //此处起作用
B = new A();
//B.x3(); //此处不起作用
prototype new 配合继承下来的只是A.prototype 下的内容。
另外说明:
当A、B都是一个Object类型,B = A;此时修改B下的属性方法,A也是会跟着修改的;
ckeditor里常有这样复值 e = a.tools; 此时扩充e, a.tools也是跟着修改,他们是绑在一起的;
但是用prototype new来继承的是全部独立的
简单的说:用new实例化后,prototype才能被继承下来