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 相关文章推荐
基于jquery的回到页面顶部按钮
Jun 27 Javascript
autoPlay 基于jquery的图片自动播放效果
Dec 07 Javascript
教你JS中的运算符乘方、开方及变量格式转换
Aug 09 Javascript
基于JS实现二维码图片固定在右下角某处并跟随滚动条滚动
Feb 08 Javascript
jQuery响应滚动条事件功能示例
Oct 14 jQuery
javascript计算对象长度的方法
Oct 25 Javascript
vue3.0 CLI - 2.2 - 组件 home.vue 的初步改造
Sep 14 Javascript
Vue中Quill富文本编辑器的使用教程
Sep 21 Javascript
Vue动态创建注册component的实例代码
Jun 14 Javascript
JS实现继承的几种常用方式示例
Jun 22 Javascript
微信小程序制作扭蛋机代码实例
Sep 24 Javascript
vue 解决provide和inject响应的问题
Nov 12 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
使用adodb lite解决问题
2006/12/31 PHP
PHP乱码问题,UTF-8乱码常见问题小结
2012/04/09 PHP
php查询whois信息的方法
2015/06/08 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
PHP实现基于3DES算法加密解密字符串示例
2018/08/24 PHP
PHP模型Model类封装数据库操作示例
2019/03/14 PHP
PHP中Session ID的实现原理实例分析
2019/08/17 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
IE6 弹出Iframe层中的文本框“经常”无法获得输入焦点
2009/12/27 Javascript
javascript中最常用的继承模式 组合继承
2010/08/12 Javascript
jQuery 幻灯片插件(带缩略图功能)
2011/01/24 Javascript
页面装载js及性能分析方法介绍
2014/03/21 Javascript
原生js和jquery实现图片轮播淡入淡出效果
2015/04/23 Javascript
JS实现无限级网页折叠菜单(类似树形菜单)效果代码
2015/09/17 Javascript
JS鼠标拖拽实例分析
2015/11/23 Javascript
用Nodejs搭建服务器访问html、css、JS等静态资源文件
2017/04/28 NodeJs
bootstrap轮播模板使用方法详解
2017/11/17 Javascript
vue移动端UI框架实现QQ侧边菜单组件
2018/03/09 Javascript
Node.Js生成比特币地址代码解析
2018/04/21 Javascript
vue系列之requireJs中引入vue-router的方法
2018/07/18 Javascript
Vue基本使用之对象提供的属性功能
2019/04/30 Javascript
如何在postman测试用例中实现断言过程解析
2020/07/09 Javascript
Vue scoped及deep使用方法解析
2020/08/01 Javascript
[55:03]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.20
2020/11/20 DOTA
Python with语句上下文管理器两种实现方法分析
2018/02/09 Python
selenium+python 对输入框的输入处理方法
2018/10/11 Python
澳大利亚首个在线预订旅游网站:Wotif
2017/07/19 全球购物
Edwaybuy西班牙:小米在线商店
2019/12/04 全球购物
酒店led欢迎词
2014/01/09 职场文书
毕业实习评语
2014/02/10 职场文书
捐赠仪式主持词
2014/03/19 职场文书
小学英语课后反思
2014/04/26 职场文书
2014年党课学习材料
2014/05/11 职场文书
民主评议党员自我鉴定
2014/10/21 职场文书
食品卫生管理制度
2015/08/06 职场文书
Python 实现定积分与二重定积分的操作
2021/05/26 Python