Js类的静态方法与实例方法区分及jQuery拓展的两种方法


Posted in Javascript onJune 03, 2016

上学时C#老师讲到对象有两类方法,静态方法(Static)和实例方法(非Static),当时不理解静态是为何意,只是强记。

后来从事了前端的工作,一直在对类(即对象,Js中严格来说没有类的定义,虽众所周知,这里还是赘述一番,以免产生歧义)的操作上,严重缺乏整体概念,最近看extetnd中再次提到拓展静态方法与实例方法,故而再次百度,才幡然领悟,其实一直有用,只是不知其专业术语呀,哈哈~

静态方法,属于类的方法,即类可以直接调用的方法。为类所有实例化对象所共用(但不能用实例对象之间调用),所以静态成员只在内存中占一块区域;

实例方法,属于实例化类后对象的方法,即实例对象调用的方法。每创建一个类的实例,都会在内存中为非静态成员分配一块存储;

静态方法在一启动时就实例化了,因而静态内存是连续的,且静态内存是有限制的;而非静态方法是在程序运行中生成内存的,申请的是离散的空间。

看代码:

function A(){
}
A.staticMethof = function(){
alert('静态方法');
}
A.prototype.instaceMethod = function(){
alert('实例方法');
}
A.staticMethof(); //类A直接调用
var instace = new A();
instace.instaceMethod();//A的实例对象instace调用

拿jQuery框架来看,它的方法都是实例方法,它的工具函数都是静态方法。静态方法$.each(); 实例方法$('body').each();

说到这里就很好理解了。

下面来看下jQuery中拓展两种方法extend的用法

其实当年看到各种框架和别人代码用到$.extend 和 $.fn.extend我是相当不开心的,哈哈,因为不懂... 现在讲了静态方法与实例方法,聪明的朋友应该可以猜到了,$.extend是拓展静态方法,而$.fn.extend是拓展实例方法,哈哈,聪明~

先说下extend。

extend,这个函数的功能基本都是实现对象的拷贝功能,即将一个对象的所有属属性拷贝到另外一个对象上去,开发插件时经常用到。

看代码:

jQuery.extend(object)

为jQuery类添加方法,即添加静态方法:

jQuery.extend({
min: function(a, b) { return a < b ? a : b; },

max: function(a, b) { return a > b ? a : b; }
});
jQuery.min(,); // 
jQuery.max(,); // 
Objectj Query.extend( target, object, [objectN]);

为其他类添加静态方法(用一个或多个对象来拓展一个对象,返回被拓展的对象

var settings = { validate: false, limit: , name: "foo" }; 
var options = { validate: true, name: "bar" }; 
jQuery.extend(settings, options);

结果:settings == { validate: true, limit: 5, name: "bar" }

jQuery.fn
jQuery.fn = jQuery.prototype = {
 init: function( selector, context ) {//….
//……
};

原来jQuery.fn = jQuery.prototype,对prototype原型链是不陌生的吧?

jQuery.fn.extend( object );

对jQuery.prototype进行拓展,即添加实例函数。

例如要开发一个插件,编辑框被点击时,alert编辑框中的内容。

$.fn.extend({
alertWhileClick: function(){
$(this).click(function(){
alert($(this).val());
})
};
});
$("#input").alertWhileClick();

你可以拓展一个对象到jQuery的prototype中去,这样的话就是插件机制了。

<span style="font-size: px;">(function( $ ){
$.fn.tooltip = function( options ) {
};
//等价于
var tooltip = {
function(options){
}
};
$.fn.extend(tooltip) = $.prototype.extend(tooltip) = $.fn.tooltip
})( jQuery );
</span>

以上所述是小编给大家介绍的Js类的静态方法与实例方法区分及jQuery拓展的两种方法 ,希望对大家有所帮助!

Javascript 相关文章推荐
响应鼠标变换表格背景或者颜色的代码
Mar 30 Javascript
javascript 面向对象编程基础:封装
Aug 21 Javascript
jquery $.ajax各个事件执行顺序
Oct 15 Javascript
再谈javascript图片预加载技术(详细演示)
Mar 12 Javascript
Jquery中对数组的操作代码
Aug 12 Javascript
Ext修改GridPanel数据和字体颜色、css属性等
Jun 13 Javascript
jQuery中queue()方法用法实例
Dec 29 Javascript
JavaScript中的数组操作介绍
Dec 30 Javascript
详解Node.js中exports和module.exports的区别
Apr 19 Javascript
JavaScript中字符串的常用操作方法及特殊字符
Mar 18 Javascript
AngularJs返回前一页面时刷新一次前面页面的方法
Oct 09 Javascript
WEEX环境搭建与入门详解
Oct 16 Javascript
JS两个数组比较,删除重复值的巧妙方法(推荐)
Jun 03 #Javascript
JS Array创建及concat()split()slice()的使用方法
Jun 03 #Javascript
浅谈JavaScript的push(),pop(),concat()方法
Jun 03 #Javascript
Jquery中map函数的用法
Jun 03 #Javascript
JavaScript进阶练习及简单实例分析
Jun 03 #Javascript
jQuery EasyUI 入门必看
Jun 03 #Javascript
创建基于Bootstrap的下拉菜单的DropDownList的JQuery插件
Jun 02 #Javascript
You might like
开发大型PHP项目的方法
2006/10/09 PHP
基于PHP制作验证码
2016/10/12 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
2018/06/20 PHP
Jquery数独游戏解析(一)-页面布局
2010/11/05 Javascript
同时使用n个window onload加载实例介绍
2013/04/25 Javascript
深入理解javascript中defer的作用
2013/12/11 Javascript
js+csss实现的一个带复选框的下拉框
2014/09/29 Javascript
JavaScript中document.forms[0]与getElementByName区别
2015/01/21 Javascript
JavaScript实现添加、查找、删除元素
2015/07/02 Javascript
JavaScript评论点赞功能的实现方法
2017/03/13 Javascript
$.browser.msie 为空或不是对象问题的多种解决方法
2017/03/19 Javascript
Vue2.0实现组件数据的双向绑定问题
2018/03/06 Javascript
vue组件的写法汇总
2018/04/12 Javascript
create-react-app修改为多页面支持的方法
2018/05/17 Javascript
详解关于Vue2.0路由开启keep-alive时需要注意的地方
2018/09/18 Javascript
使用微信小程序开发弹出框应用实例详解
2018/10/18 Javascript
layui使用label标签的方法
2019/09/14 Javascript
Vue + Scss 动态切换主题颜色实现换肤的示例代码
2020/04/27 Javascript
[00:50]深扒TI7聊天轮盘语音出处6
2017/05/11 DOTA
python实现探测socket和web服务示例
2014/03/28 Python
初步解析Python下的多进程编程
2015/04/28 Python
python 二分查找和快速排序实例详解
2017/10/13 Python
python正则实现计算器功能
2017/12/14 Python
Linux-ubuntu16.04 Python3.5配置OpenCV3.2的方法
2018/04/02 Python
Sanic框架应用部署方法详解
2018/07/18 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
2019/08/02 Python
pycharm激活码2020最新分享适用pycharm2020最新版亲测可用
2020/11/22 Python
送给程序员的20个Java集合面试问题
2014/08/06 面试题
旅游管理毕业生自荐信
2013/11/05 职场文书
大学四年规划书范文
2013/12/27 职场文书
优秀交警事迹材料
2014/01/26 职场文书
党校培训自我鉴定
2014/02/01 职场文书
农民工工资支付承诺函
2014/03/31 职场文书
2014年个人工作总结范文
2014/11/07 职场文书
2014年幼儿园工作总结
2014/11/10 职场文书
门市房租房协议书
2014/12/04 职场文书