前端面试题

1.实现点击页面内任何元素,alert该元素的元素名

2.给出js异步加载的方案,以及说明原理

3.扩展string方法,使得所有字符串拥有trim方法

4.如何拓展开发JQ插件

 1 /**
 2  * 第一题
 3  * 一开始的想法是想获取页面所有元素,依次绑定方法,突然又想到那直接绑定在doucument上,利用事件冒泡触发
 4  */
 5 //考虑兼容问题
 6 function bindEvent(el, event, fn) {
 7     if (el.addEventListener) {
 8         el.addEventListener(event, fn);
 9     } elseif (el.attachEvent) {
10         el.attachEvent('on' + event, fn);
11     } else {
12         el['on' + event] = fn;
13     }
14 }
15  
16 bindEvent(document, 'click', function (e) {
17     alert(e.target.nodeName);
18 });
19  
20  
21  
22 /**
23  * 2.异步加载方案
24  * 常用的有ajax以及iframe,其中iframe使用已经越来越少
25  */
26 //iframe通过改变src值可以实现异步加载
27 //ajax通过核心对象XMLHttpRequest可以实现异步加载
28  
29  
30 /**
31  * 3.通过String的Prototype可以扩展string的方法
32  */
33 String.prototype.trim = function () {
34     return this.replace(/(^s*)|(s*$)/g, '');
35 };
36  
37 /**
38  * 4.如何扩展jq插件
39  */
40 //通过jq的extend方法或直接扩展fn属性
41 //写法1:
42 $.fn.extend({
43     plugin: function () {
44         //通过jq获取到的元素可能有多个,所以使用each可以保证所有元素都实现
45         this.each(function () {
46             //do something
47         });
48    
49         //返回this保证jq的链式调用
50         return this;
51     }
52 });
53  
54 //跟写法1相同
55 $.fn.plugin = function () {
56     this.each(function () {
57          //do something
58     });
59  
60     return this;
61 };
62 
63 //使用方法:
64 $("body").plugin();
65 
66 //写法2
67  jQuery.extend({
68     alert: function () {
69         console.log(this);
70     }
71 });
72 
73 //写法2例子, 字符串去除头尾空格
74 jQuery.extend({
75     trim: function (str) {
76         return str.replace(/(^s*)|(s*$)/g, '');
77     }
78 });
79 
80 
81 var str = "     i am facial    ";
82 str = $.trim(str);   //"i am facial"
原文地址:https://www.cnblogs.com/facial/p/5800845.html