面向对象的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. 异常详细信息: System.Web.Hosting.HostingEnvironmentException: 访问 IIS 元数据库失败 解决方法

    访问IIS元数据库失败 同理,给操作系统的新建用户赋予IIS操作权限同样可以采用该命令来处理 说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错 ...

  2. 一SERVLET (1)

    转载自http://www.cnblogs.com/xdp-gacl/p/3760336.html 一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公 ...

  3. 【转载】跟着9张思维导图学习JavaScript

    原文:跟着9张思维导图学习JavaScript 学习的道路就是要不断的总结归纳,好记性不如烂笔头,so,下面将 po 出我收集的 9 张 JavaScript相关的思维导图(非原创). 思维导图小ti ...

  4. Know How To Use Check Box Mapping Of Other Values Property In Oracle Forms

    Check Box Mapping of Other Values specifies how any fetched or assigned value that is not one of the ...

  5. [HDOJ4609]3-idiots(FFT,计数)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4609 题意:n个数,问取三个数可以构成三角形的组合数. FFT预处理出两个数的组合情况,然后枚举第三个 ...

  6. Codeforces Round #382 (Div. 2) D. Taxes 歌德巴赫猜想

    题目链接:Taxes D. Taxes time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  7. ASP.Net UpdatePanel控件(转)

      Asp.net UpdatePanel 允许用户构建一个丰富的,以客户端为中心的应用程序,引用UpdatePanel控件,能够实现页面的部分刷新,一个包含scriptManage和 UpdateP ...

  8. Java I/O NIO学习

    给出一个学习的链接讲的很全.. http://ifeve.com/java-nio-all/ 上边的是中文翻译的这里是原地址:http://tutorials.jenkov.com/java-nio/ ...

  9. Python学习(1)安装Python

    *****  安装Python 在官网上 https://www.python.org/downloads/ 可以看到有3.5.1与2.7.11两个版本,我这里用的是3.5.1版本 我用的是win7/ ...

  10. Android批量图片加载经典系列——采用二级缓存、异步加载网络图片

    一.问题描述 Android应用中经常涉及从网络中加载大量图片,为提升加载速度和效率,减少网络流量都会采用二级缓存和异步加载机制,所谓二级缓存就是通过先从内存中获取.再从文件中获取,最后才会访问网络. ...