[关闭]
@Bios 2018-12-10T08:44:18.000000Z 字数 1470 阅读 703

从懵懂到为所欲为 插件化开发设计思想

js


先来个例子:

  1. var name = 'A;
  2. function getName(){
  3. return this.name;
  4. }
  5. var obj = {
  6. name: 'B',
  7. showName:function(a){
  8. console.log(getName());
  9. console.log(a());
  10. console.log(arguments);
  11. console.log(arguments[0]());
  12. }
  13. }
  14. obj.showName(getName,1);

JavaScript是一门面向对象的语言,所以JavaScript中不存在独立的函数,所有的函数都是某一个对象的方法!

  1. console.log(getName());
  2. => console.log(window.getName()); // A this就指向的是window
  1. console.log(a());
  2. => console.log(window.a); // A this就指向的是window
  1. console.log(arguments[0]());
  2. => console.log(window.a); // undefind this就指向的是window

arguments是个类数组

  1. arguments:[
  2. 0: function getName()
  3. 1: 1
  4. length: 2
  5. ……
  6. ]
  1. var name = 'A;
  2. function getName(){
  3. console.log(this); // this指向arguments
  4. return this.name;
  5. }
  6. var obj = {
  7. name: 'B',
  8. showName:function(a){
  9. console.log(arguments[0]()); // undefind arguments中没有name属性
  10. }
  11. }
  12. obj.showName(getName,1);

给arguments增加一个name属性

  1. var name = 'A;
  2. function getName(){
  3. console.log(this); // this指向arguments
  4. return this.name;
  5. }
  6. var obj = {
  7. name: 'B',
  8. showName:function(a){
  9. arguments.name = 'finget';
  10. console.log(arguments[0]()); // finget
  11. }
  12. }
  13. obj.showName(getName,1);

插件用来解决一个具体的功能

  1. <script type="text/javascript">
  2. ()(); // 自执行函数
  3. </script>
  1. /**
  2. * ()(); // 自执行函数,实际上是创建了一个命名空间
  3. *
  4. * 早期的命名空间:
  5. * 对象式的,一人负责一个部分
  6. * var obj = {}
  7. * obj.xx = ...
  8. * obj.aa.bb = ...
  9. * 另一种:
  10. * function fn () {}
  11. * fn.name = xxx
  12. * fn.xxx
  13. */
  14. // ()() + function(){} 定义了一个作用域
  15. (function(window){
  16. // 默认配置
  17. var DEFAULTS = {
  18. plugName: 'ts',
  19. init: 'click'
  20. }
  21. var API = {
  22. // 用户自定义
  23. config: function(options){
  24. if(!options) {return DEFAULTS}
  25. for (var key in options){
  26. console.log(key);
  27. DEFAULTS[key] = options[key];
  28. }
  29. }
  30. }
  31. window.test = API;
  32. })(this);
  33. // 思考 怎样将默认配置替换成用户配置
  34. test.config({init:"input"});
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注