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 相关文章推荐
重定向实现代码
Nov 20 Javascript
2010年最佳jQuery插件整理
Dec 06 Javascript
JS 面向对象之神奇的prototype
Feb 26 Javascript
Jquery创建层显示标题和内容且随鼠标移动而移动
Jan 26 Javascript
javascript闭包传参和事件的循环绑定示例探讨
Apr 17 Javascript
js、jquery图片动画、动态切换示例代码
Jun 03 Javascript
jQuery实现滚动切换的tab选项卡效果代码
Aug 26 Javascript
Javascript6中字符串的四个新用法分享
Sep 11 Javascript
JS实现下拉菜单列表与登录注册弹窗效果
Aug 10 Javascript
小程序click-scroll组件设计
Jun 18 Javascript
Vue结合路由配置递归实现菜单栏功能
Jun 16 Javascript
js不常见操作运算符总结
Nov 20 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
PHP语法速查表
2006/12/06 PHP
PHP第一季视频教程(李炎恢+php100 不断更新)
2011/05/29 PHP
thinkphp验证码显示不出来的解决方法
2014/03/29 PHP
使用PHPMailer实现邮件发送代码分享
2014/10/23 PHP
PHP大神的十大优良习惯
2016/09/14 PHP
php使用array_chunk函数将一个数组分割成多个数组
2018/12/05 PHP
php如何利用pecl安装mongodb扩展详解
2019/01/09 PHP
Javascript 不能释放内存.
2006/09/07 Javascript
javascript中的new使用
2010/03/20 Javascript
jQuery DOM操作实例
2014/03/05 Javascript
JS实现的表格行鼠标点击高亮效果代码
2015/11/27 Javascript
深入理解vuex2.0 之 modules
2017/11/20 Javascript
利用Javascript获取选择文本所在的句子详解
2017/12/03 Javascript
详解Node.js amqplib 连接 Rabbit MQ最佳实践
2019/01/24 Javascript
vue实现移动端图片上传功能
2019/12/23 Javascript
Vue父子组件传值的一些坑
2020/09/16 Javascript
python实现文件名批量替换和内容替换
2014/03/20 Python
python实现telnet客户端的方法
2015/04/15 Python
Django的URLconf中使用缺省视图参数的方法
2015/07/18 Python
Python实现读取邮箱中的邮件功能示例【含文本及附件】
2017/08/05 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
2018/07/26 Python
Python数据类型之List列表实例详解
2019/05/08 Python
在pycharm中实现删除bookmark
2020/02/14 Python
Python requests接口测试实现代码
2020/09/08 Python
python中复数的共轭复数知识点总结
2020/12/06 Python
python抢购软件/插件/脚本附完整源码
2021/03/04 Python
html5 canvas合成海报所遇问题及解决方案总结
2017/08/03 HTML / CSS
Bloomingdale’s阿联酋:选购奢华时尚、美容及更多
2020/09/22 全球购物
教师求职推荐信范文
2013/11/20 职场文书
学生个人自我鉴定范文
2014/03/28 职场文书
保护环境倡议书300字
2014/05/19 职场文书
社区反邪教工作方案
2014/06/16 职场文书
工程主管竞聘书
2015/09/15 职场文书
领导干部学习心得体会
2016/01/23 职场文书
如何使用Python对NetCDF数据做空间相关分析
2021/04/21 Python
Python绘制散点图之可视化神器pyecharts
2022/07/07 Python