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 相关文章推荐
javascript 表单验证常见正则
Sep 28 Javascript
javascript 二分法(数组array)
Apr 24 Javascript
javascript使用activex控件的代码
Jan 27 Javascript
JavaScript中去掉数组中的重复值的实现方法
Aug 03 Javascript
9行javascript代码获取QQ群成员具体实现
Oct 16 Javascript
javascript自定义的addClass()方法
May 28 Javascript
JavaScript实现页面跳转的几种常用方式
Nov 28 Javascript
js数组常用操作方法小结(增加,删除,合并,分割等)
Aug 02 Javascript
纯js实现的积木(div层)拖动功能示例
Jul 19 Javascript
微信小程序使用request网络请求操作实例
Dec 15 Javascript
解决LayUI表单获取不到data的问题
Aug 20 Javascript
微信小程序常用的3种提示弹窗实现详解
Sep 19 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
计数器详细设计
2006/10/09 PHP
php 用sock技术发送邮件的函数
2007/07/21 PHP
php中使用addslashes函数报错问题的解决方法
2013/02/06 PHP
PHP将XML转数组过程详解
2013/11/13 PHP
PHP随机生成唯一HASH值自定义函数
2015/04/20 PHP
php图像处理类实例
2015/07/28 PHP
php实用代码片段整理
2016/11/12 PHP
Javascript MD4
2006/12/20 Javascript
javascript 验证日期的函数
2010/03/18 Javascript
JQuery最佳实践之精妙的自定义事件
2010/08/11 Javascript
JavaScript的document对象和window对象详解
2010/12/30 Javascript
用Javascript评估用户输入密码的强度(Knockout版)
2011/11/30 Javascript
javascript将url中的参数加密解密代码
2014/11/17 Javascript
JQuery基础语法小结
2015/02/27 Javascript
jQuery简单实现图片预加载
2015/04/20 Javascript
js实现上一页下一页的效果【附代码】
2016/03/10 Javascript
JS及PHP代码编写八大排序算法
2016/07/12 Javascript
Nodejs抓取html页面内容(推荐)
2016/08/11 NodeJs
js实现table添加行tr、删除行tr、清空行tr的简单实例
2016/10/15 Javascript
微信小程序 wx:for的使用实例详解
2017/04/27 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
vue导出html、word和pdf的实现代码
2018/07/31 Javascript
Angular单元测试之事件触发的实现
2020/01/20 Javascript
Vue实现简单的跑马灯
2020/05/25 Javascript
[01:59]翻天覆地,因你而变,7.20版本地图更新速览
2018/11/24 DOTA
[54:57]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第二场 1月8日
2021/03/11 DOTA
Python中的装饰器用法详解
2015/01/14 Python
Python django使用多进程连接mysql错误的解决方法
2018/10/08 Python
python3 requests库文件上传与下载实现详解
2019/08/22 Python
什么是Deployment descriptors;都有什么类型的部署描述符
2015/07/28 面试题
智乐游戏测试笔试题
2014/05/21 面试题
实习心得体会
2014/01/02 职场文书
青年教师典范事迹材料
2014/01/31 职场文书
三年级学生评语
2014/04/23 职场文书
邀请函样本
2015/02/02 职场文书
用javascript制作qq注册动态页面
2021/04/14 Javascript