js细枝末节(2)

(1)不同的浏览器有不同的滚轮事件。主要是有两种,onmousewheel(firefox不支持)和DOMMouseScroll(只有firefox支持)
if(document.addEventListener){
document.addEventListener('DOMMouseScroll',scrollFunc,false);
}//W3C firefox
window.onmousewheel=document.onmousewheel=scrollFunc;//IE/Opera/Chrome 

(2)创建对象,并保持原型链
var O = function(obj) {
    function T() {}
    T.prototype = obj;
    return new T();
};

var obj = {name: 'obj', age: 0 }, 
    obj1 = O(obj), 
    obj2 = O(obj1);

// 更改原型链的一处,所有原型链都会更改
obj.name = 'superclass';    
console.log(obj1.name);    // 'superclass'
console.log(obj2.name);    // 'superclass'

// 每一层可单独处理
obj1.name = 100;
console.log(obj1.name);    //100
delete obj1.name;    //暴漏原型链
console.log(obj1.name);    // 'superclass'
(来源于Rain Man博客)

(3)return false用在什么地方; 如果是初学者,可能也一头雾水

1.阻止浏览器默认事件,如点击元素,阻止向上冒泡
2.判断表单填写错误时,阻止提交
3.满足条件时,跳出jq的eack遍历


(4)prototype中的一些细节

函数实例.__proto__ == 构造器.prototype

function phone(name){
            //this.name = "mi";
            this.name = name;
            this.price = function(){
                console.log("2000");
            }
        }
        phone.prototype = {
            name:"meizu",
            price:function(){
                console.log("2500");
            }
        }
        var buy = new phone('mi');
        console.log(buy.name);
        buy.price();

在这个问题上,完全当了个白痴,竟然还觉得查找属性和方法,要先查找构造器函数,明明是先在对象实例上找属性和方法,如果没有,再通过__proto__去构造器.prototype上查找(在markdown上输下划线还要用 \ 转义)

(5)Array.protptype.sort()

对于数组元素为数字字符的,直接用sort()数字0-9内还好,两位以上就不适用了,因为会先将数字转换为字符串


(6) 使用reduce()实现二维数组的扁平化

(11)ascii码的转换

很笨实现这么个效果


                    
                    

你可能感兴趣的:(js细枝末节(2))