面向对象的JAVA  最开始当然是对象的定义了 收集了以下的五种写法

//第1种写法
function Circle(r) {
this.r = r;
}
Circle.PI = 3.14159;
Circle.prototype.area = function() {
return Circle.PI * this.r * this.r;
} var c = new Circle(1.0);
alert(c.area());
//第2种写法
var Circle = function() {
var obj = new Object();
obj.PI = 3.14159; obj.area = function( r ) {
return this.PI * r * r;
}
return obj;
} var c = new Circle();
alert( c.area( 1.0 ) );
//第3种写法
var Circle = new Object();
Circle.PI = 3.14159;
Circle.Area = function( r ) {
return this.PI * r * r;
} alert( Circle.Area( 1.0 ) );
//第4种写法
var Circle={
"PI":3.14159,
"area":function(r){
  return this.PI * r * r;
  }
};
alert( Circle.area(1.0) );
//第5种写法
var Circle = new Function("this.PI = 3.14159;this.area = function( r ) {return r*r*this.PI;}"); alert( (new Circle()).area(1.0) );

说明:

用得最多的还是1/4两种 而且也比较好理解 特别是第四种基于json格式来定义JS对象比较普遍  SAIKU的JS编写风格就是这种

=========================================

第四种,代码量少点。JSON在传递时更灵活。

=========================================

第1种: 
优点:体现了OO的继承特性. 每次初始化Circle对象,都只设置了必须的值(r).

第2种: 
缺点:每次都必须初始化很多变量,时间成本+内存成本,相比第一种高昂了点.

第3种: 
缺点:虽然实现了封装,但貌似Circle只是一个包名,对于OO的继承好像发挥不大.

第4种: 
缺点:同第3种. 只是用了Object Literal方式初始化了对象.

第5种: 
缺点:代码编写,确实不方便.没体现更好的分离.

=========================================

个人觉得第一种更符合OO开发要求! 
第四种适合可以理解成封包! 且非常灵活,本身就是一种json格式,所以方便应用于json格式传递环境下,eg:ExtJs就是采用了第一种方式封装核心,第四种方式打包UI

=========================================

第一种从java角度来说,是一个普通的类,这个类需要调用的时候,就new xx()这样一个对象出来。
第四种,从java的角度来说,是一个单例类!你调用的时候直接XXX.xx()这样调用,不需要new。

saiku的写法

定义 JS 对象 - > Settings

var Settings = {

   //常量配置
I18N_LOCALE: "en",
QUERY_PROPERTIES: {
'saiku.olap.query.automatic_execution': true,
'saiku.olap.query.nonempty': true,
'saiku.ui.render.mode' : 'table',
'saiku.olap.result.formatter' : "flattened"
},
TABLE_LAZY: true,
PLUGINS: [
"Chart"
],
MAPS_TYPE: 'OSM' // OSM || GMAPS
}; //函数拓展
Settings.GET = function () {
var params = {1,2,3};
return params;
}();
_.extend(Settings, Settings.GET); //常量拓展
Settings.REST_URL = Settings.TOMCAT_WEBAPP + Settings.REST_MOUNT_POINT;

拓展的JS对象定义

有时候有一些编写好的JS框架,我们需要拓展JS框架的内容

这时候需要定义一个继承自框架对象的JS自定义对象

举例如下:

//SessionWorkspace对象继承自backbone.js的Backbone.Model对象
// var Model = Backbone.Model = function(attributes, options) {};
// _.extend(Model.prototype, Events, {
// initialize: function(){}
// }); // initialize/destroy/url 和 fetch 是父类的方法,SessionWorkspace 重写了该方法
// refresh/process_datasources/prefetch_dimensions 是 SessionWorkspace 独有的自定义方法
//这样看来,还挺像Java的继承的嘛
var SessionWorkspace = Backbone.Model.extend({ initialize: function(args, options) {//parent
_.extend(this, Backbone.Events);
_.bindAll(this, "process_datasources","prefetch_dimensions");
this.initialized = false;
this.first = true;
this.fetch({success:this.process_datasources},{});
}, refresh: function() {//this
this.fetch({success:this.process_datasources},{});
}, destroy: function() {//parent
if (typeof localStorage !== "undefined" && localStorage) {
localStorage.clear();
}
return false;
}, process_datasources: function(model, response) {//this
}, prefetch_dimensions: function() {//this
}, url: function() {//parent
if (this.first) {
this.first = false;
return encodeURI(Saiku.session.username + "/discover");
}
else {
return encodeURI(Saiku.session.username + "/discover/refresh");
}
}
});

[JS] 面向对象的5种写法和拓展JS对象的写法的更多相关文章

  1. js面向对象初步探究(上) js面向对象的5种写方法

    非常长一段时间看网上大神的JS代码特别吃力.那种面向对象的写法方式让人看得云里来雾里去.于是就研究了一下JS面向对象.因为是初学,就将自己在网上找到的资料整理一下,作为记忆. js面向对象的5种写方法 ...

  2. JS面向对象(2) -- this的使用,对象之间的赋值,for...in语句,delete使用,成员方法,json对象的使用,prototype的使用,原型继承与原型链

    相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...

  3. JS面向对象的几种写法

    JS 中,面向对象有几种写法.归纳下,大概有下面这几种:工厂模式,构造函数模式,原型模式,构造函数与原型模式的混合使用,原型链继承,借用构造函数继承. 一.工厂模式 function person ( ...

  4. js面向对象编程(第2版)——js继承多种方式

    附带书籍地址: js面向对象编程(第2版)

  5. js面向对象的几种常见写法

    下面是一个简单的js对象:定义Circle类,拥有成员变量r,常量PI和计算面积的成员函数area(),常用为第一种和第三种. 1.工厂方式 var Circle = function() { var ...

  6. js面向对象的五种写法

    第一种: //第1种写法 function Circle(r) { this.r = r; } Circle.PI = 3.14159; Circle.prototype.area = functio ...

  7. 归纳下js面向对象的几种常见写法

    //定义Circle类,拥有成员变量r,常量PI和计算面积的成员函数area() 1.工厂方式 var Circle = function() { var obj = new Object(); ob ...

  8. js面向对象的几种方式----工厂模式、构造函数模式、原型模式

    对象的字面量 var obj={} 创建实例对象 var obj=new Object() 工厂模式 function cPerson(name,sex,age){ var o = new Objec ...

  9. js面向对象的几种方式

    对象的字面量 var obj={}:创建实例对象 var obj=new Object();构造函数模式 function fn(){}, new fn();工厂模式:用一个函数,通过传递参数返回对象 ...

随机推荐

  1. [SAP ABAP开发技术总结]数据引用(data references)、对象引用(object references)

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  2. hdu 1869 (Floyd)

    http://acm.hdu.edu.cn/showproblem.php?pid=1869 六度分离 Time Limit: 5000/1000 MS (Java/Others)    Memory ...

  3. HDU 5422 Rikka with Graph

    Rikka with Graph Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  4. mysql概要(十四)索引

    1.索引是对数据库数据建立目录加快了查询速度.索引分为哈希索引和二叉树索引 (大数据量转移,如果表中带有大量字段索引,进行数据导入时,建议先去掉索引导入数据再统一加入索引,减少索引计算量) 2.索引原 ...

  5. Spring字符集过滤器CharacterEncodingFilter

    Spring中的字符集过滤器可以很方便的为我们解决项目中出现的中文乱码问题,而且使用方法也很简单,只需要在web.xml文件中配置一下该过滤器,设置两个重要的参数(encoding和forceEnco ...

  6. nodejs学习笔记<三>关于路由(url)

    在网站开发中,路由的设置非常关键.nodejs对路由处理封装了一个比较全面的模块. 来认识下url模块 1)在命令行(cmd)可以直接 node —> url 可直接查看url模块的所有方法. ...

  7. django连接mysql自动同步生成数据表

    python manage.py makemigrations python manage.py migrate 如果是 Django 不主动提示创建管理员(Django 1.9不提示)用下面的命令创 ...

  8. surfaceview介绍

    [1]surfaceview 控件是一个重量级控件      [2]内部维护了2个线程     A 获取数据  负责显示     B 负责显示  获取数据      [3]他可以直接在子线程更新ui ...

  9. uva 11728 Alternate Task

    vjudge 上题目链接:uva 11728 其实是个数论水题,直接打表就行: #include<cstdio> #include<algorithm> using names ...

  10. POJ 3260 多重背包+完全背包

    前几天刚回到家却发现家里没网线 && 路由器都被带走了,无奈之下只好铤而走险尝试蹭隔壁家的WiFi,不试不知道,一试吓一跳,用个手机软件简简单单就连上了,然后在浏览器输入192.168 ...