javascript面向对象,实现的几种方式

1:直接使用JSON对象

        var o1={
"a":1,
"b":2,
"c":function() {
}
}

2:把函数作为对象

function HandleOne() {
var test = 0;
this.setFlag = function() {
test = 1;
}
this.displayFlag = function() {
console.log("这是逻辑1中的变量值:" + test);
}
return this;
} var H1 = HandleOne();
H1.displayFlag(); //逻辑1输出自己的变量

3:匿名函数的方式 

//匿名函数的方式
var H1 = (function() {
var test = 0;
this.setFlag = function() {
test = 1;
}
this.displayFlag = function() {
console.log("这是逻辑1中的变量值:" + test);
}
//返回this对象,以访问module里定义的函数
return this;
} ()); H1.displayFlag(); //逻辑1输出自己的变量

4: 只暴漏对象中的特定元素

    var person = function () {
// Private
var name = "Robert";
return {
getName: function () {
return name;
},
setName: function (newName) {
name = newName;
}
};
} ();
alert(person.name); // Undefined
alert(person.getName()); // "Robert"
person.setName("Robert Nyman");
alert(person.getName()); // "Robert Nyman"

jquery extend 函数使用方法

$(function(){

//测试extend的基本用法
//后面的对象可以覆盖前面的对象,有的元素可以覆盖,没有的元素可以补充
var e1=$.extend({"a":1,"b":2},{"d":3,"b":22});
console.log(e1);
//result : {a: 1, b: 22, d: 3} //测试向jquery全局对象中添加元素(可以是函数) 插件原理!!!!!
$.extend({"a":function() {
alert("33333");
}}); $.a();
//result :弹出 33333对话框 //测试向jquery对象中扩展元素的方法 插件原理!!!!!
//以及this转换成jquery对象的方法
//以及jquery对象和dom对象之间的转换
$.fn.extend({"a":function() {
console.log($(this).attr("name"));
console.log($(this)[0].name);
}}); $("#tt1").a(); //html中的内容:<a href="#" id="tt1" name="sdfsdf">ssss</a>
//result:sdfsdf sdfsdf //测试extend深度拷贝和浅拷贝的不同
//面度嵌套对象,如果是浅度拷贝,只是用上一个去替换上一个;如果是深度拷贝,会对嵌套的对象进行复杂的extend操作
var e2=$.extend(true,{"a":1,"b":2,"c":{"a":1,"b":2}},{"d":3,"b":22,"c":{"d":1,"b":22}});
console.log(e2); var e3=$.extend(false,{"a":1,"b":2,"c":{"a":1,"b":2}},{"d":3,"b":22,"c":{"d":1,"b":22}});
console.log(e3); /**
深度拷贝result:
Object {a: 1, b: 22, c: Object, d: 3}
a: 1
b: 22
c: Object
a: 1
b: 22
d: 1
__proto__: Object
d: 3 浅度拷贝result
__proto__: Object
extend.html:46
Object {a: 1, b: 22, c: Object, d: 3}
a: 1
b: 22
c: Object
b: 22
d: 1
__proto__: Object
d: 3
__proto__: Object
**/
});

Javascript 插件式开发

  • 设置默认值
  • 支持jquery选择器
  • 支持jquery的链式调用
  • 插件里的方法
 (function ($) {
var defaults = {
prevId: 'prevBtn',
prevText: 'Previous',
nextId: 'nextBtn',
nextText: 'Next'
//……
}; var showLink = function (obj) {
$(obj).append(function () { return "(" + $(obj).attr("href") + ")" });
} $.fn.easySlider = function (options) {
var options = $.extend(defaults, options);
return this.each(function () {
showLink(this);
});
}
})(jQuery);

Javascript 闭包的使用

2013学习总结----JavaScript的更多相关文章

  1. Dynamic CRM 2013学习笔记(十一)利用Javascript实现子表合计(汇总,求和)功能

    我们经常有这样一种需求,子表里新加或修改一数值后,要马上在主表里把它们的和显示在主表上.如果用插件来实现,可以实现求和,但页面上还要刷新一下才能显示正确.这时就考虑到用JS来实现这一功能,并自动刷新页 ...

  2. Dynamic CRM 2013学习笔记 系列汇总

    这里列出所有 Dynamic CRM 2013学习笔记 系列文章,方便大家查阅.有任何建议.意见.需要,欢迎大家提交评论一起讨论. 本文原文地址: Dynamic CRM 2013学习笔记 系列汇总 ...

  3. Dynamic CRM 2013学习笔记(十二)实现子表合计(汇总,求和)功能的通用插件

    上一篇 Dynamic CRM 2013学习笔记(十一)利用Javascript实现子表合计(汇总,求和)功能 , 介绍了如何用js来实现子表合计功能,这种方法要求在各个表单上添加js方法,如果有很多 ...

  4. Dynamic CRM 2013学习笔记(十三)附件上传 / 上传附件

    上传附件可能是CRM里比较常用的一个需求了,本文将介绍如何在CRM里实现附件的上传.显示及下载.包括以下几个步骤: 附件上传的web页面 附件显示及下载的附件实体 调用上传web页面的JS文件 实体上 ...

  5. Dynamic CRM 2013学习笔记(九)CrmFetchKit.js介绍:Fetchxml、多表联合查询, 批量更新

    CrmFetchKit.js是一个跨浏览器的一个类库,允许通过JavaScript来执行fetch xml的查询,还可以实现批量更新,分页查询等.目前已支持Chrome 25, Firefox 19 ...

  6. Dynamic CRM 2013学习笔记(三十八)流程1 - 操作(action)开发与配置详解

    CRM 2013 里流程有4个类别:操作(action).业务流程(business process flow).对话(dialog)和工作流(workflow).它们都是从 setting –> ...

  7. Dynamic CRM 2013学习笔记(四十三)流程6 - 自定义流程活动

    当我们在流程里添加步骤时,有一些默认的步骤,像创建.更新.发邮件等,但如果你想加一个里面没有的步骤,比如发SMS消息,或者调用一个外部的web service,怎么办?这时就只能自定义一个流程活动了. ...

  8. Dynamic CRM 2013学习笔记(三十一)自定义用excel批量导入实体数据

    有一个实体的子表数据量太大,于是客户想用execel来导入实体数据.首先想到的是用系统自带的Import Data,客户嫌太麻烦,比如lookup字段要做map等. 下面是具体的实现步骤: 一.定义e ...

  9. HTML 学习笔记 JavaScript(面向对象)

    现在让我们继续跟着大神的脚步前进 学习一下JavaScript中的面向对象的思想,其实作为一个iOS开发者,对面向对象还是比较熟悉的,但是昨晚看了一下Js中的面向对象,妈蛋 一脸萌比啊.还好有大神.让 ...

随机推荐

  1. 关于float /double、string类型的hash函数/hash表实现(转)

    #include <ext/hash_map> #include <math.h> #include <stdio.h> using namespace std; ...

  2. C#读取物理网卡信息及其对应的IP地址

    using Microsoft.Win32; using System; using System.Collections; using System.Collections.Generic; usi ...

  3. 视觉SLAM中的数学基础 第四篇 李群与李代数(2)

    前言 理解李群与李代数,是理解许多SLAM中关键问题的基础.本讲我们继续介绍李群李代数的相关知识,重点放在李群李代数的微积分上,这对解决姿态估计问题具有重要意义. 回顾 为了描述三维空间里的运动,我们 ...

  4. VC6.0 error LNK2001: unresolved external symbol _main解决办法

    学习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时,编译都已通过.产生连接错误的原因非常多,尤其LNK2001错误 ...

  5. 最近买了个kindle,为了方便阅读,写了个程序抓取网页内容发送到Kindle

    主要觉得往kindle里加书籍太麻烦了,要下载下来,还要通过邮件发送,特别一些网页文字版的书籍没办法放到kindle里,所以想着还不如自己动手丰衣足食,写一个程序直接抓取网页内容,制作成书籍,然后自动 ...

  6. 二叉树系列 - 二叉搜索树 - 线性时间内把有序链表转化为BST

    引言 本文来自于Google的一道题目: how to merge two binary search tree into balanced binary search tree. how to me ...

  7. zmq 学习笔记

    0. PUB/SUB, XPUB/XSUB filtering happens at publisher sides when sockets are using a connected protoc ...

  8. 聊一聊google的Knowledge Graph

    什么是Knowledge Graph? 它是google用于增强它的搜索引擎的功能和提高搜索结果质量的一种技术.在2012年5月16日提出,除了提供基本的与主题相关的链接服务之外,它还能结构化与主题相 ...

  9. 微信公众号开发第六课 BAE结合实现迅雷账号随机分享

    迅雷离线是个好东西,那么我们能不能实现这样一个功能,回复迅雷,随机返回一个迅雷账户和密码. 首先在t_type类型表中添加 迅雷以及对应用值xunlei,这样返回的case值中对应值xunlei. 建 ...

  10. EPANET中读取INPUT文件的函数文件——INPUT1.C/INPUT2.C/INPUT3.C

    首先介绍下这3个文件的关系:可以说INPUT1.C的函数粒度最大,它的函数getdata()就完成了整个INPUT文件数据的读入,该函数又调用了INPUT2.C中的部分函数,INPUT2.C文件中的函 ...