firebug的一个有趣现象介绍
firebug的一个有趣现象介绍
发布时间:2016-12-30 来源:查字典编辑
摘要:复制代码代码如下:varobj={length:0,splice:function(){}}console.log(obj)猜猜上面会打印出...

复制代码 代码如下:

var obj = {length:0,splice:function(){}}

console.log(obj)

猜猜上面会打印出啥?

没错,打印出来的看起来是一个空数组。。。

在FIREBUG里如果一个对象同时拥有length属性和splice方法,就会被firebug显示为数组的形式。。。

如果以前注意过的话就会发现JQUERY就是这么写的,通过选择器打印出来的看起来跟数组一样。

一直以来我都很好奇为毛返回的数组,但是却有数组根本没有的方法,也没有数组该有的方法,比如:pop等

最后通过查资料才发现这么一个有趣的现象。。

但是在IE下面打印出来的就是正常的[Object Object]了。

于是就可以这么玩一下。。。。

复制代码 代码如下:

var push = Array.prototype.push;

var splice = Array.prototype.splice;

var a = function() {

var a = function(name) {

return new a.fn.init(name)

}

a.fn = a.prototype;

a.fn.init = function(name) {

var arr = document.getElementsByTagName(name);

merge(this,arr);

}

a.fn.splice = splice;

a.fn.init.prototype = a.fn;

return a;

}()

function merge(first, second) {//完全抄袭jquery中的merge方法- -

var i = first.length || 0, j = 0;

if( typeof second.length === "number") {

for(var l = second.length; j < l; j++) {

first[i++] = second[j];

}

} else {

while(second[j] !== undefined) {

first[i++] = second[j++];

}

}

first.length = i;

return first;

}

a.fn.css = function(pop, val) {

for(var i = 0; i < this.length; i++) {

if(this[i].nodeType===1){

this[i].style[pop] = val;

}

}

return this;

}

var ab = a('div');

ab.css('backgroundColor', '#444444').css('borderWidth', '2px').css('borderStyle', 'solid')

于是,山寨版jquery并且只支持tagName选择器并且只有山寨CSS方法的一个库就诞生了。。

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Javascript教程学习
热门Javascript教程学习
编程开发子分类