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 相关文章推荐
ExtJS Store的数据访问与更新问题
Apr 28 Javascript
js读写(删除)Cookie实例详解
Apr 17 Javascript
js动态添加删除,后台取数据(示例代码)
Nov 25 Javascript
jQuery on方法传递参数示例
Dec 09 Javascript
JS实现兼容性好,带缓冲的动感网页右键菜单效果
Sep 18 Javascript
bootstrap读书笔记之CSS组件(上)
Oct 17 Javascript
js实现文本上下来回滚动
Feb 03 Javascript
微信小程序实现拖拽 image 触摸事件监听的实例
Aug 17 Javascript
jQuery实现模糊查询的方法分析
May 10 jQuery
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
Sep 18 Javascript
Vue实现鼠标经过文字显示悬浮框效果的示例代码
Oct 14 Javascript
Vue多选列表组件深入详解
Mar 02 Vue.js
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
动态网站web开发 PHP、ASP还是ASP.NET
2006/10/09 PHP
PHP中FTP相关函数小结
2016/07/15 PHP
PHP经典实用正则表达式小结
2017/05/04 PHP
phpfpm的作用和用法
2019/10/10 PHP
PHP并发场景的三种解决方案代码实例
2021/02/27 PHP
Javascript实例教程(19) 使用HoTMetal(1)
2006/12/23 Javascript
javascript[js]获取url参数的代码
2007/10/17 Javascript
自用js开发框架小成 学习js的朋友可以看看
2010/11/16 Javascript
最常用的12种设计模式小结
2011/08/09 Javascript
Prototype源码浅析 String部分(一)之有关indexOf优化
2012/01/15 Javascript
jquery插件制作 自增长输入框实现代码
2012/08/17 jQuery
js confirm()方法的使用方法实例
2013/07/13 Javascript
JavaScript中的对象序列化介绍
2014/12/30 Javascript
jQuery 的 ready()的纯js替代方法
2016/11/20 Javascript
详解多页应用 Webpack4 配置优化与踩坑记录
2018/10/16 Javascript
Vue数据双向绑定的深入探究
2018/11/27 Javascript
javascript中的this作用域详解
2019/07/15 Javascript
[07:39]第一届亚洲邀请赛回顾视频
2017/02/14 DOTA
使用DataFrame删除行和列的实例讲解
2018/04/08 Python
python绘制已知点的坐标的直线实例
2019/07/04 Python
解决pytorch GPU 计算过程中出现内存耗尽的问题
2019/08/19 Python
浅析Python3 pip换源问题
2020/01/06 Python
selenium学习教程之定位以及切换frame(iframe)
2021/01/04 Python
英国50岁以上人群的交友网站:Ourtime
2018/03/28 全球购物
求职信模版
2013/11/30 职场文书
大学毕业生的自我鉴定
2013/11/30 职场文书
中药专业自荐信范文
2014/03/18 职场文书
房地产公司见习自我鉴定
2014/04/28 职场文书
素质教育标语
2014/06/27 职场文书
计算机求职信
2014/07/02 职场文书
学校教师读书活动总结
2014/07/08 职场文书
2014应届本科生自我评价
2014/09/13 职场文书
Python如何利用正则表达式爬取网页信息及图片
2021/04/17 Python
Python selenium模拟网页点击爬虫交管12123违章数据
2021/05/26 Python
SpringCloud Alibaba项目实战之nacos-server服务搭建过程
2021/06/21 Java/Android
详解Go语言Slice作为函数参数的使用
2021/07/02 Golang