JavaScript乱七八糟的点个人总结

来源:互联网 发布:数据库的垂直拆分 编辑:程序博客网 时间:2024/04/29 20:38

1.caller和callee的区别:caller返回一个函数的引用,这个函数调用了当前的函数;callee放回正在执行的函数本身的引用,它是arguments的一个属性。点击打开链接

2.avascript event对象的clientX,offsetX,screenX,pageX区别:

event.clientX、event.clientY 鼠标相对于浏览器窗口可视区域的X,Y坐标(窗口坐标),可视区域不包括工具栏和滚动条。
event.pageX、event.pageY 类似于event.clientX、event.clientY,但它们使用的是文档坐标而非窗口坐标。
event.offsetX、event.offsetY 鼠标相对于事件源元素(srcElement)的X,Y坐标,
event.screenX、event.screenY 鼠标相对于用户显示器屏幕左上角的X,Y坐标。

点击打开链接

3.待学习

继承:点击打开链接

前端JavaScript规范点击打开链接

4.内存方面 栈 堆

点击打开链接

5.构造函数继承点击打开链接

1)构造函数绑定:使用call或apply方法,将父对象的构造函数绑定在子对象上,即在子对象构造函数中加一行Animal.apply(this, arguments);
2)prototype模式:Cat.prototype = new Animal(); Cat.prototype.constructor = Cat; 将Cat的prototype对象指向一个Animal的实例。任何一个prototype对象都有一个constructor属性,指向它的构造函数。我们必须手动纠正,将Cat.prototype对象的constructor值将Animal改为Cat。
3)直接继承prototype(不好):Cat.prototype = Animal.prototype; Cat.prototype.constructor = Cat; 将Cat的prototype对象,然后指向Animal的prototype对象
缺点是 Cat.prototype的修改,都会反映到Animal.prototype,第二行constructor就改掉了
4)利用空对象作为中介:
function extend(Child, Parent) {
     var F = function(){};
    F.prototype = Parent.prototype;
    Child.prototype = new F();
    Child.prototype.constructor = Child;
    Child.uber = Parent.prototype; // 子对象设一个uber属性,这个属性直接指向父对象的prototype属性
}
extend(Cat,Animal);
5)拷贝继承
function extend2(Child, Parent) {
    var p = Parent.prototype;
    var c = Child.prototype;
    for (var i in p) {
      c[i] = p[i];
      }
    c.uber = p;
}

extend2(Cat, Animal);

6.非构造函数继承点击打开链接

1)function object(o) {

    function F() {}

    F.prototype = o;

    return new F();

}

var Doctor = object(Chinese);

2)浅拷贝(不好)

function extendCopy(p) {

    var c = {};

    for (var i in p) {
      c[i] = p[i];
    }

    c.uber = p;

    return c;
}

如果父对象的属性等于数组或另一个对象,那么实际上,子对象获得的只是一个内存地址,而不是真正拷贝,因此存在父对象被篡改的可能。

3)深拷贝

function deepCopy(p, c) {
    var c = c || {};
    for (var i in p) {
      if (typeof p[i] === 'object') {
        c[i] = (p[i].constructor === Array) ? [] : {};
        deepCopy(p[i], c[i]);
      } else {
         c[i] = p[i];
      }
    }
    return c;
  }
var Doctor = deepCopy(Chinese);

7.谈谈对this的理解:

this总是指向函数的直接调用者(而非间接调用者);

如果有new关键字,this指向new出来的那个对象;

在事件中,this指向触发这个事件的对象,特殊的是,IE中的attachEvent中的this总是指向全局对象Window;attachEvent中this指向问题的解决

点击打开链接

8.js延迟加载

js加载的缺点:加载工具方法没必要阻塞文档,过多js加载会影响页面效率,一旦网速不好,那么整个网站将等待js加载而不进行后续渲染等工作。 有些工具方法需要按需加载,用到再加载,不用不加载。默认正常模式下下,JS是同步加载的,即优先加载JS,只有当JS文件下载完,dom和css才开始加载,当某些时候我们需要JS异步加载,我们可以通过以下方式来设置异步加载,不同情况下选取不同方式即可。

方法点击打开链接

9.编写高性能Javascript代码的N条建议点击打开链接

10.内存泄漏点击打开链接


0 0
原创粉丝点击