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控件之下拉树和下拉表格附源码
Oct 15 Javascript
node.js中的socket.io入门实例
Apr 26 Javascript
select多选 multiple的使用示例
Jun 16 Javascript
关于jQuery判断元素是否存在的问题示例探讨
Jul 21 Javascript
JavaScript判断字符长度、数字、Email、电话等常用判断函数分享
Apr 01 Javascript
使用jquery制作弹出框效果
Apr 03 Javascript
利用Vue.js框架实现火车票查询系统(附源码)
Feb 27 Javascript
jquery横向纵向鼠标滚轮全屏切换
Feb 27 Javascript
使用Electron构建React+Webpack桌面应用的方法
Dec 15 Javascript
微信小程序动画(Animation)的实现及执行步骤
Oct 28 Javascript
js操作table中tr的顺序实现上移下移一行的效果
Nov 22 Javascript
在HTML中使用JavaScript的两种方法
Dec 24 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
限制ckeditor上传图片文件大小的方法
2013/11/15 PHP
php5.4以下版本json不支持不转义内容中文的解决方法
2015/01/13 PHP
YiiFramework入门知识点总结(图文教程)
2015/12/28 PHP
PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
2016/12/24 PHP
Centos 6.5下PHP 5.3安装ffmpeg扩展的步骤详解
2017/03/02 PHP
Laravel5.5+ 使用API Resources快速输出自定义JSON方法详解
2020/04/06 PHP
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
2008/12/02 Javascript
JQuery验证工具类搜集整理
2013/01/16 Javascript
js实现在页面上弹出蒙板技巧简单实用
2013/04/16 Javascript
基于jquery的禁用右键、文本选择功能、复制按键的实现代码
2013/08/27 Javascript
jQuery对val和atrr(&quot;value&quot;)赋值的区别介绍
2014/09/26 Javascript
js实现简单选项卡与自动切换效果的方法
2015/04/10 Javascript
js中flexible.js实现淘宝弹性布局方案
2020/06/23 Javascript
关于js原型的面试题讲解
2016/09/25 Javascript
使用BootStrap建立响应式网页——通栏轮播图(carousel)
2016/12/21 Javascript
AngularJS与后端php的数据交互方法
2018/08/13 Javascript
基于Koa(nodejs框架)对json文件进行增删改查的示例代码
2019/02/02 NodeJs
JavaScript如何判断对象有某属性
2020/07/03 Javascript
python使用clear方法清除字典内全部数据实例
2015/07/11 Python
Python3实现简单可学习的手写体识别(实例讲解)
2017/10/21 Python
Python selenium抓取微博内容的示例代码
2018/05/17 Python
Python3.x爬虫下载网页图片的实例讲解
2018/05/22 Python
python文件转为exe文件的方法及用法详解
2019/07/08 Python
Python中使用gflags实例及原理解析
2019/12/13 Python
解决Keras 与 Tensorflow 版本之间的兼容性问题
2020/02/07 Python
Melijoe时尚童装德国官网:Melijoe德国
2016/09/03 全球购物
澳大利亚旅游网站:Lastminute
2017/08/07 全球购物
理肤泉英国官网:La Roche-Posay英国
2019/01/14 全球购物
长青弘远的面试题
2012/06/09 面试题
GWT的应用有哪两种部署模式
2012/12/21 面试题
DIY手工制作经营店创业计划书
2014/02/01 职场文书
教师个人自我评价
2015/03/04 职场文书
对外汉语教师推荐信
2015/03/27 职场文书
《烈火英雄》观后感:致敬和平时代的英雄
2019/11/11 职场文书
教你如何使用Python开发一个钉钉群应答机器人
2021/06/21 Python
配置nginx负载均衡
2022/05/06 Servers