JavaScript的"类"
2015-07-16 11:05
603 查看
1. 基本创建“类”方式
在类之间共享通用的属性
3. 添加继承,通过传入一个可选的父类来创建新类
使用apply() 和call() 来更改上下文对象
var Class = function() { var klass = function() { this.init.apply(this, arguments); }; klass.prototype.init = function() {}; //定义 prototype 的别名 klass.fn = klass.prototype; // 定义类的别名 klass.fn.parent = klass; // 给类添加属性 klass.extend = function(obj) { var extended = obj.extended; for (var i in obj) { klass[i] = obj[i]; } if (extended) extended(klass); }; // 给实例添加属性 klass.include = function(obj) { var included = obj.included; for (var i in obj) { klass.fn[i] = obj[i]; } if (included) included(klass); }; return klass; }; var Person = new Class(); // 添加静态属性 Person.extend({ find: function(id) { /* ... */ }, exists: function(id) { /* ... */ } }); //添加实例属性 Person.include({ save: function(id) { /* ... */ }, destroy: function(id) { /* ... */ } }); var person = new Person(); person.save();
在类之间共享通用的属性
var Animal = function(){}; Animal.prototype.breath = function(){ console.log('breath'); }; var Dog = function(){}; // Dog 继承了Animal Dog.prototype = new Animal(); Dog.prototype.wag = function(){ console.log('wag tail'); }; var dog = new Dog(); dog.wag(); dog.breath(); // 继承的属性
3. 添加继承,通过传入一个可选的父类来创建新类
functionName.apply(this, [1, 2, 3]); functionName.call(this, 1, 2, 3);
使用apply() 和call() 来更改上下文对象
var Class = function(parent){ var klass = function(){ this.init.apply(this,arguments); } //继承 if (parent) { var subclass = function() { }; subclass.prototype = parent.prototype; klass.prototype = new subclass(); } klass.prototype.init = function(){}; klass.fn = klass.prototype; klass.fn.parent = klass; klass._super = klass.__proto__; //类 静态属性 klass.extend = function(obj){ var extended = obj.extended; for(var i in obj){ klass[i] = obj[i]; } if(extended) extended(klass); } //类 实例属性 klass.include = function(obj){ var included = obj.included; for(var i in obj){ klass.fn[i] = obj[i]; } if(included) included(klass); } //类 作用域 klass.proxy = function(func){ var self = this; return(function(){ return func.apply(self, arguments); }); } klass.fn.proxy = klass.proxy; return klass; } var Button = new Class(); Button.include({ init: function(element){ this.element = jQuery(element); // 代理了这个click 函数 this.element.click(this.proxy(this.click)); }, click: function(){ } });
相关文章推荐
- JavaScript常用代码段
- 下拉列表联动总结(AJAX下拉列表联动简单示例)
- 初识Javascript小结
- jsp ${param.id}用法
- ExtJs4 xtype一览
- 1.5 ejs中atmjs的用法
- JS的Document属性和方法
- js 停止事件冒泡 阻止浏览器的默认行为(阻止超连接 # )
- 【js】带按钮的js弹出框
- json_encode 注意点
- 在 Eclipse 中使用 JSHint 检查 JavaScript 代码
- JS的parent、opener、self对象
- JS在页面限制checkbox最大复选数
- JavaScript常用技巧
- 浅谈javascript中的DOM方法
- 解析Json
- JS基础类型和引用类型
- angualrjs $scope 详细分析
- js无法删除cookie问题
- 详细分析JavaScript函数定义