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 相关文章推荐
麻雀虽小五脏俱全 Dojo自定义控件应用
Sep 04 Javascript
js中关于new Object时传参的一些细节分析
Mar 13 Javascript
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
Feb 27 Javascript
JavaScript中的函数(二)
Dec 23 Javascript
实例讲解jquery中mouseleave和mouseout的区别
Feb 17 Javascript
js 实现一些跨浏览器的事件方法详解及实例
Oct 27 Javascript
JQuery ZTree使用方法详解
Jan 07 Javascript
JS表单提交验证、input(type=number) 去三角 刷新验证码
Jun 21 Javascript
谈谈vue中mixin的一点理解
Dec 12 Javascript
JS实现的简单折叠展开动画效果示例
Apr 28 Javascript
解决layui数据表格table的横向滚动条显示问题
Sep 04 Javascript
vue+高德地图实现地图搜索及点击定位操作
Sep 09 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
从C/C++迁移到PHP——判断字符类型的函数
2006/10/09 PHP
PHP生成数组再传给js的方法
2014/08/07 PHP
smarty缓存用法分析
2014/12/16 PHP
php实现购物车产品删除功能(2)
2020/07/23 PHP
PHP生成腾讯云COS接口需要的请求签名
2018/05/20 PHP
颜色选择器 Color Picker,IE,Firefox,Opera,Safar
2010/11/25 Javascript
JQuery 应用 JQuery.groupTable.js
2010/12/15 Javascript
在iframe里的页面编写js,实现在父窗口上创建动画效果展开和收缩的div(不变动iframe父窗口代码)
2011/12/20 Javascript
js+html+css实现鼠标移动div实例
2013/01/30 Javascript
JavaScript动态修改网页元素内容的方法
2015/03/21 Javascript
JavaScript 中使用 Generator的方法
2017/12/29 Javascript
JavaScript判断日期时间差的实例代码
2018/03/01 Javascript
对VUE中的对象添加属性
2018/09/18 Javascript
vue中promise的使用及异步请求数据的方法
2018/11/08 Javascript
详解Vue iview IE浏览器不兼容报错(Iview Bable polyfill)
2019/01/07 Javascript
javascript的惯性运动实现代码实例
2019/09/07 Javascript
[12:29]2018国际邀请赛 开幕秀
2018/08/22 DOTA
教你用Python脚本快速为iOS10生成图标和截屏
2016/09/22 Python
详解Python中最难理解的点-装饰器
2017/04/03 Python
Centos7 Python3下安装scrapy的详细步骤
2018/03/15 Python
Python 解决中文写入Excel时抛异常的问题
2018/05/03 Python
django的ORM操作 增加和查询
2019/07/26 Python
Python使用贪婪算法解决问题
2019/10/22 Python
如何解决tensorflow恢复模型的特定值时出错
2020/02/06 Python
Python Selenium 设置元素等待的三种方式
2020/03/18 Python
鼠标滚轮事件和Mac触控板双指事件
2019/12/23 HTML / CSS
全球第二大家装零售商:Lowe’s
2018/01/13 全球购物
Expedia韩国官网:亚洲发展最快的在线旅游门户网站
2018/02/26 全球购物
加拿大床上用品、家居装饰、厨房和浴室产品购物网站:Linen Chest
2018/06/05 全球购物
大学生个人求职信范文
2013/09/21 职场文书
运动会领导邀请函
2014/02/05 职场文书
《路旁的橡树》教学反思
2014/04/07 职场文书
2016银行招聘自荐信
2016/01/28 职场文书
《巨人的花园》教学反思
2016/02/19 职场文书
【海涛DOTA】D-cup邀请赛NV.cn vs DT.Love
2022/04/01 DOTA
MySQL中LAG()函数和LEAD()函数的使用
2022/08/14 MySQL