在开发框架时,为了防止变量以及全局对象的污染,要使用沙箱模式。
沙箱模式: 代码自执行,分割作用域
将常用的全局对象,通过参数传递到沙箱内
好处:
- 在一定程度上提高变量的搜索性能;
有利于代码压缩
(function(global) { // 独立的作用域,与外界隔离 }(window));
<script>
(function (global) {
var init;
//核心函数
//1.利用工厂模式。new 或者不new 都能正确的创建对象
var itcast = function (selector, context) {
return new itcast.fn.init(selector, context);
}
//核心原型,存储操作dom元素的方法
itcast.fn = itcast.prototype = {
constructor: itcast
};
//构造函数
// 2. 为了和itcast建立关联,将构造函数init写到itcast的原型上。。
//同时让init变量也引用该构造函数。为了方便使用
//function init(selector, context) {}
init = itcast.fn.init = function (selector, context) {}
//3.1 由于在框架外部用户只能拿到itcast函数以及其原型。(从外部访问不了what)
//3.2 用户在扩展操作dom方法时,只能向原型上扩展。(不可能修改源码)
// 为了用户在框架外部实现扩展方法.让init对象继承自itcast。prototype
// itcast.prototype.init.prototype = itcast.prototype;
init.prototype = itcast.prototype;
//4. 将itcast函数暴露在全局上
//任何用户只要加载框架代码,就可以使用$函数,就是itcast
global.$ = global.itcast = itcast;
})(window);
itcast.prototype.addClass = function () {
console.log('addClass');
}
var i = itcast("div");
i.addClass();
</script>