Javascript OOP framework
Javascript OOP framework
我想知道下面的代码是否是定义在js中创建类的包装器函数的最佳方式。
有没有人愿意分享一个更好的例子,因为我认为这是第一次尝试。
如果有什么遗漏的话,我会错过什么?
j = {
context : {}
};
j.namepsace = (function(){
var createnamespace = function(parent, remainder){
if(remainder.length === 0){
return;
}
parent[remainder[0]] = parent[remainder[0]] || {};
return createnamespace(parent[remainder[0]], remainder.splice(1));
};
return {
define : function(ns){
createnamespace(j.context, ns.split('.'));
}
}
}());
j.class = (function(){
return {
construct : function(namespace, name, ctor){
namespace[name] = ctor;
},
ctor : function(namespace, name, ctor, prototype){
for (var property in prototype) {
if (prototype.hasOwnProperty(property)) {
ctor.prototype[property] = prototype[property];
}
}
namespace[name] = ctor;
}
}
}());
j.mixin = (function(){
return {
with : function(object, objectliteral){
for (var prototype in objectliteral) {
if (objectliteral.hasOwnProperty(prototype)) {
object[prototype] = objectliteral[prototype];
}
}
},
toDefintion : function(classdefinition, mixin){
var objectliteral = mixin();
for (var property in objectliteral) {
if (objectliteral.hasOwnProperty(property)) {
classdefinition.prototype[property] = objectliteral[property];
}
}
}
};
}());
j.namepsace.define('application.section');
j.class.construct(j.context.application.section,'printNameMixin', function(){
return {
printName : function(){
console.log(this.name);
}
};
});
j.class.construct(j.context.application.section,'person',function(name, address, age){
return {
name : name,
address : address,
age : age
};
});
j.class.ctor(j.context.application.section,'customer',function(name){
this.name = name;
}, {
name : 'unregistered client'
});
j.mixin.toDefintion(j.context.application.section.customer, j.context.application.section.printNameMixin );
var person = j.context.application.section.person('Blair Davidson','23 Test St',33);
var cust = new j.context.application.section.customer("Bankwest");
cust.printName();
console.log(person);
您的方法很有趣,但当您询问问题时,我会注意到3件事:
1.原型
使用您的方法,您可以打破原型链的机制,这是javascript的强大功能之一。
2.继承
mixin模式不是我最喜欢的模式,因为它经常用于模拟多重继承。但是,正如单一响应性原则和继承只能用于在具有相同响应性的类之间分解代码的事实所表明的那样,在一个好的OOP设计中应该避免多重继承。
3.OOP
如果你想做一些强大的OOP,你肯定需要更多的功能(比如接口、依赖注入…)。为此,我建议你看看现有的框架,因为这是一项非常长的任务(相信我)。您可以在我的配置文件中的链接后面看到一个此类框架的示例(这是一个仅适用于nodejs的javascript框架,但您可以在客户端(浏览器)和服务器(nodejs)端使用)。
相关文章:
- 使用Scala Play Framework视图中的键检索映射值
- Joomla Gantry Framework ie8 LESS/CSS
- Google Data API上的OOP Javascript回调方法
- Javascript oop instances
- jQuery each()没有'使用OOP方法是行不通的
- JavaScript中的OOP太令人困惑了,ES6很棒,但没有得到很好的支持,该怎么办
- 将JavaScript oop代码翻译为Lua
- 使用Ionic Framework和AngularJS嵌入社交网络的发布
- 如何在Ionic Framework中实现选项卡页面之间的转换
- JQuery AJAX 和 OOP JS 范围困境
- 这是一个很好的例子,显示了 JavaScript 中的 OOP 和过程编程之间的区别
- javascript OOP:到达对象内部的方法
- Javascript OOP-从函数返回一个值;s在对象内部's方法(嵌套函数)
- 在Phoenix Framework应用程序的某些页面上包含Javascript
- 错误:打开Robot Framework日志失败
- Javascript OOP-为什么这两个几乎完全相同的语句给出不同的输出
- 这是Javascript中的OOP吗?如何在内部初始化它
- OOP ajax 以避免代码重复
- 如何在jQuery/Javascript中使用OOP来传递一个跨浏览器兼容的值
- Javascript OOP framework