博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js写插件教程深入
阅读量:6232 次
发布时间:2019-06-21

本文共 2374 字,大约阅读时间需要 7 分钟。

原文地址:
转载请注明出处

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);

转载于:https://www.cnblogs.com/lianxiaozhuang/p/10075851.html

你可能感兴趣的文章
部署 Office Communications Server 2007 R2 Enterprise Edition-Part01
查看>>
C# 中的INotifyPropertyChanged和ObservableCollection<T>
查看>>
查看文件信息的命令
查看>>
error CS0583: 内部编译器错误(0xc0000005 位于地址 5A18D31D 处): 可能的原因是“BIND”。...
查看>>
疯狂ios讲义之疯狂连连看游戏简介
查看>>
总结bash编程基础,引入函数结构化编程。
查看>>
redhat linux忘记登陆密码之解决办法
查看>>
RHEL 6 LAMP(一)
查看>>
Nginx负载均衡
查看>>
理解 virbr0 - 每天5分钟玩转 OpenStack(11)
查看>>
屡败屡战,攻克中项(系统集成项目管理师考试经历分享)
查看>>
SQL 2008 群集配置详尽攻略[2]--设置故障转移集群
查看>>
OSPF中使用完全次末节区域--total nssa
查看>>
unity3D与网页的交互---做项目的一点总结
查看>>
Nginx—核心配置location匹配规则说明
查看>>
分布式监控之Zabbix-Server
查看>>
Zone-based User Based Firewall
查看>>
AWS CLI使用s3
查看>>
在jfinal中使用druid,并配置查看权限
查看>>
视频+书签 Powerpiont2010可以这样玩
查看>>