js写插件教程深入
原文地址:https://github.com/lianxiaozhuang/blog
转载请注明出处
js 写插件教程深入
1.介绍具有安全作用域的构造函数
function Fn(name){
this.a = name;
}
Fn.prototype = {
constructor:Fn,
getF:function(){
console.log(1);
}
}
new Fn();
//new 出来的Fn就是一个构造函数
//倘若有人忘记写new,直接调用Fn();此时var p = Fn();可见实例p没有getF的方法;
//为了解决这种问题;引入了安全作用域的构造函数概念
function Fn(name){
if(!(this instanceof Fn)){
//只要不是new的,用Fn()直接调用的,这里的this绝对不指向Fn;让它从
//新new一下;直到下一次代码走else里的内容,故把this.a 放到了else里
return new Fn(name)
}else{
this.a = name;
}
}
Fn.prototype = {
constructor:Fn,
getF:function(){
console.log(1);
}
}
2.默认参数
//我们用过一些插件,是可以传一些配置参数的,当然如果你不传的话它有默认的值,
function Fn(params){
var defaults = {
width:100,
color:"#000"
};
var params = params||{};
for (var x in defaults) {
if (typeof params[x] === 'undefined') {
params[x] = defaults[x];
//对于使用时,没有设置的参数;用默认参数代替
}
}
this.params= params;//得到的this.params,在方法中调用;
}
Fn.prototype = {
}
3.方法到底写到this里还是prototype 里
//举个例子
//①
function Fn(){
this.getC = function(){
//...
}
}
//or...
//②
function Fn(){}
Fn.prototype.getC = function(){}
//大家可能都会有这样的纠结,getC到底写到this里还是原型里
//这要从内存说起;写到原型上,每执行一个实例,getC不需要开辟新的内存
//故,可以把一些纯计算的方法,写原型上,如果方法和实例本身有关,应该写道this中
4.方法名防止冲突处理
//如果在引入你的插件之前,window下已经有Fn的变量;怎么办,你如果这么搞; 岂不是把别人写的Fn搞掉了
//此时应该把Fn的控制权交出,自己用Fn2输出
(function(){
var Fn=function(){
console.log(000)
}
Fn.prototype = {
}
/**
这里暂时没写好;
*/
if(window.Fn){
// throw Error("Fn已经存在,请使用Fn2")
window.Fn2 = Fn ;
}else{
window.Fn2 = Fn ;
}
}())
5.对外输出的规范化exprot 、amd 完整写法
;(function(global) {
//开启严格模式,规范代码,提高浏览器运行效率
"use strict";
//定义一个类,通常首字母大写
var MyPlugin = function(options) {
this.name = name;
this.init();
};
//覆写原型链,给继承者提供方法
MyPlugin.prototype = {
constructor:MyPlugin,
init: function() {
}
};
//兼容CommonJs规范
if (typeof module !== 'undefined' && module.exports) module.exports = MyPlugin;
//兼容AMD/CMD规范
if (typeof define === 'function') define(function() { return MyPlugin; });
//注册全局变量,兼容直接使用script标签引入该插件
global.MyPlugin = MyPlugin;
//this,在浏览器环境指window,在nodejs环境指global
//使用this而不直接用window/global是为了兼容浏览器端和服务端
//将this传进函数体,使全局变量变为局部变量,可缩短函数访问全局变量的时间
})(this);
js写插件教程深入的更多相关文章
- js写插件教程
<!doctype html><html lang="en"><head> <meta charset="UTF-8&qu ...
- js写插件教程入门
原文地址:https://github.com/lianxiaozhuang/blog 转载请注明出处 1. 点击add可以添加个自input的内容到div里并实现变颜色 <div id=& ...
- 自己动手写插件底层篇—基于jquery移动插件实现
序言 本章作为自己动手写插件的第一篇文章,会尽可能的详细描述一些实现的方式和预备知识的讲解,随着知识点积累的一点点深入,可能到了后期讲解也会有所跳跃.所以,希望知识点不是很扎实的读者或者是初学者,不要 ...
- 为jQuery写插件
很多场合,我们都会调用jQuery的插件去完成某个功能,比如slider. 如下图,做一个div,通过“$( "#slider" ).slider();”的方式直接将div变成sl ...
- jquery.cookie 使用文档,$.cookie() 文档教程, js 操作 cookie 教程文档。
jquery.cookie 使用文档,$.cookie() 文档教程, js 操作 cookie 教程文档. jquery.cookie中的操作: jquery.cookie.js是一个基于jquer ...
- js写的复制功能,只支持IE
如果用js写,只能支持IE,如果想全支持,需要用jQuery的插件:jquery.zclip.js 下面是用js写的: var copyHref = function(){ ...
- 关于如何使用three.js的小教程<一>
昨天看了看three.js这个东西,身为一个3D引擎,他还是非常强大的.官网上有个tutorial讲的不甚具体.http://aerotwist.com/tutorials/getting-start ...
- windows下Eclipse安装Perl插件教程
windows下Eclipse安装Perl插件教程 想用eclipse编写perl.网上看了很多资料.但EPIC插件的下载连接都失效了.无奈,只好自己动手写个教程记录一下. 准备工作: 安装好Ecli ...
- knob.js进度插件
关于knob.js进度插件的使用 关于这个插件,妹的,第一次使用坑死爹了,各种不会,幸亏我有持之以恒的精神,最终还是让其臣服于我的胯下.... 1. 引入 head 部分添加knob.js,同时引 ...
随机推荐
- JAVA调用FTP上传文件
import java.io.File; import java.io.FileInputStream; import org.apache.commons.net.ftp.FTP; import o ...
- 测试计划&性能测试分析报告模板(仅供参考)
一.测试计划 1. 引言 1.1 编写目的 2. 参考文档 3. 测试目的 4. 测试范围 4.1 测试对象 4.2 需要测试的特性 4.3 无需测试的特性 5. 测试启动与结束准则 5.1 ...
- Python3.2-re模块之常用正则记录
python的re模块是个很好的模块,这里简单记录下自己编写的几个有用的正则: 1:邮箱匹配: gReMailbox = re.compile(r'([\w\.\-+]+@[\w\-]+(?:\.[\ ...
- Linux内核RPC请求过程
这篇文章讲讲server端RPC报文的处理流程.server端RPC报文的处理函数是svc_process,这个函数位于net/sunrpc/svc.c中.这个函数须要一个svc_rqst结构的指针作 ...
- Hive JDBC:Permission denied: user=anonymous, access=EXECUTE, inode=”/tmp”
今天使用JDBC来操作Hive时,首先启动了hive远程服务模式:hiveserver2 &(表示后台运行),然后到eclipse中运行程序时出现错误: Permission denied: ...
- 树上三角形 BZOJ3251
分析: 模拟赛T3,其实很水,当时出于某些原因,没有去写这道题... len>46必定有解 为了满足不是三角形,那么斐波那契数列是最优选择,而斐波那契数列的第46项超过了2^31-1,所以超过4 ...
- Android开发——进程间通信之Messenger
0. 前言 不论是Android还是其他操作系统,都会有自己的IPC机制,所谓IPC(Inter-Process Communication)即进程间通信.首先线程和进程是很不同的概念,线程是CPU ...
- 【arm学习】我的第一个裸板程序
初学ARM感觉写个裸板程序还真的不容易,可能是没有用到ADS,keil之类的开发平台的缘故吧.编译,链接过程在linux平台上完成,这样学起来更有实感,还能顺便熟悉linux环境,以及命令,何乐而不为 ...
- mfc CFileFind查找类
查找文件 CFileFind类 提取文件图标 显示大图标 显示小图标 一.查找文件 . CFileFind类 //c:\mydir\myfile.txt GetFileName 获取文件名 myfil ...
- STEAM 自动安装时提示C++ 安装不了等问题
[情况] 今天安装游戏, 安装时自动安装 Visual C++ 2015 x64 Minimum Runtime ....不成功, 提示网络源不可使用, 或者使用以下安装源 C:\ProgramDat ...