指引网

当前位置: 主页 > 编程开发 > PHP >

关于一些前端js框架的源码研究

来源:未知 作者:admin 点击: 时间:2016-02-25 00:37
[摘要] nderscore.js源码 Underscore.js 没有对原生 JavaScript 对象进行扩展,而是通过调用 _() 方法进行封装,一旦封装完成,原生 JavaScript 对象便成为一个 Underscore 对象。 判断给定变量是否是对象 /

nderscore.js源码

 

Underscore.js 没有对原生 JavaScript 对象进行扩展,而是通过调用 _() 方法进行封装,一旦封装完成,原生 JavaScript 对象便成为一个 Underscore 对象。

判断给定变量是否是对象

 

// Is a given variable an object?
    _.isObject = function(obj) {
        var type = typeof obj;
        return type === 'function' || type === 'object' && !!obj;
    };

这是underscore.js的判断给定变量是否是object的一段源码。 我们知道typeof会返回如下六个值:

1. 'undefined' --- 这个值未定义;
2. 'boolean'    --- 这个值是布尔值;
3. 'string'        --- 这个值是字符串;
4. 'number'     --- 这个值是数值;
5. 'object'       --- 这个值是对象或null6. 'function'    --- 这个值是函数。  

&&的优先级要高与||!!的作用相当于Boolean(),将其转换为布尔值。

判断给定值是否是DOM元素

 

// Is a given value a DOM element?
    _.isElement = function(obj) {
        return !!(obj && obj.nodeType === 1);
    };

同样!!相当于Boolean()的作用,nodeType === 1则说明是元素节点,属性attr是2 ,文本text是3

<body>
    <p id="test">测试</p>
<script>
    var t = document.getElementById('test');
    alert(t.nodeType);//1
    alert(t.nodeName);//p
    alert(t.nodeValue);//null
</script>
</body>

firstChild属性

var t = document.getElementById('test').firstChild;
alert(t.nodeType);//3
alert(t.nodeName);//#test
alert(t.nodeValue);//测试

文本节点也算是一个节点,所以p的子节点是文本节点,所以返回3

------分隔线----------------------------