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 20 Javascript
js将控件隐藏的方法及display属性介绍
Jul 04 Javascript
JS中Date日期函数中的参数使用介绍
Jan 02 Javascript
分享使用AngularJS创建应用的5个框架
Dec 05 Javascript
小巧强大的jquery layer弹窗弹层插件
Dec 06 Javascript
js窗口震动小程序分享
Nov 28 Javascript
微信开发 JS-SDK 6.0.2 经常遇到问题总结
Dec 08 Javascript
Bootstrap modal使用及点击外部不消失的解决方法
Dec 13 Javascript
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
Feb 10 Javascript
jquery实现动态创建form并提交的方法示例
May 27 jQuery
浅谈React中组件逻辑复用的那些事儿
May 21 Javascript
vue实现表格合并功能
Dec 01 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
PHP临时文件的安全性分析
2014/07/04 PHP
PHP+Ajax检测用户名或邮件注册时是否已经存在实例教程
2014/08/23 PHP
ThinkPHP框架下微信支付功能总结踩坑笔记
2019/04/10 PHP
Laravel Validator自定义错误返回提示消息并在前端展示
2019/05/09 PHP
PHP预定义接口――Iterator用法示例
2020/06/05 PHP
NodeJS框架Express的模板视图机制分析
2011/07/19 NodeJs
js输出阴历、阳历、年份、月份、周示例代码
2014/01/29 Javascript
在JavaScript中构建ArrayList示例代码
2014/09/17 Javascript
网页中表单按回车就自动提交的问题的解决方案
2014/11/03 Javascript
基于jQuery实现点击列表加载更多效果
2016/05/31 Javascript
异步加载JS、CSS代码(推荐)
2016/06/15 Javascript
RequireJS简易绘图程序开发
2016/10/28 Javascript
JS原生带小白点轮播图实例讲解
2017/07/22 Javascript
vue实现动态列表点击各行换色的方法
2018/09/13 Javascript
vue使用v-for实现hover点击效果
2018/09/29 Javascript
vue表单中遍历表单操作按钮的显示隐藏示例
2019/10/30 Javascript
js实现带积分弹球小游戏
2020/07/21 Javascript
一篇文章看懂JavaScript中的回调
2021/01/05 Javascript
Python获取文件所在目录和文件名的方法
2017/01/12 Python
浅谈机器学习需要的了解的十大算法
2017/12/15 Python
Python标准库使用OrderedDict类的实例讲解
2019/02/14 Python
python使用time、datetime返回工作日列表实例代码
2019/05/09 Python
ITK 实现多张图像转成单个nii.gz或mha文件案例
2020/07/01 Python
Python基于Webhook实现github自动化部署
2020/11/28 Python
美国老牌主机服务商:iPage
2016/07/22 全球购物
shallow copy和deep copy的区别
2016/05/09 面试题
销售员自我评价怎么写
2013/09/19 职场文书
三八妇女节活动主持词
2014/03/17 职场文书
建筑工程技术专业求职信
2014/07/16 职场文书
入党积极分子学习党的纲领思想汇报
2014/09/13 职场文书
会议接待欢迎词范文
2015/01/26 职场文书
开业庆典致辞
2015/08/01 职场文书
golang判断key是否在map中的代码
2021/04/24 Golang
正确使用MySQL update语句
2021/05/26 MySQL
浅谈Redis的keys命令到底有多慢
2021/10/05 Redis
Windows server 2012 配置Telnet以及用法详解
2022/04/28 Servers