欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

记录一下工作中的问题,顺便整理思路

程序员文章站 2022-06-12 19:44:20
...

一、this指向

原型对象中方法中的this对象是实例对象(谁调用就指向谁)

其他函数的this对象指向的是window对象

二、Object.prototype.toString.call(num) === "[object Array]"?

判断某种对象的具体类型时,我们可以通过该方式,判断返回的字符串对象来确定该数据类型,如 "[object Array]"代表的是一个数组对象,这是因为Object.prototype.toString就是一个访问者设计模式的一个对象。

访问者模式

核心是调用了一次call方法。call、apply方法有两个作用,一个是改变函数执行的this指针,第二个是为执行的方法添加额外的参数

起源:设

fn = function(e){ console.log(this,e) }

在ie中,如

dom.attachEvent('onclick',fn)

此处,回掉函数fn的this指针,指向的并不是dom元素,而是window

所以此处应为:

dom.attachEvent('onclick',fn.call(dom,e))

此处还可以传递更多的参数(call的作用二)
 

dom.attachEvent('onclick',fn.call(dom,e,21321313131,123131312131))

如何在确定使用call这种方式的时候,定义一个函数呢?

function test(){
    // 我们默认第一个参数是操作对象,其余参数是数组
    // 通过函数的内置对象arguments进行访问
    /* 删除:
    [1,2,3].splice(1) = [2,3]
    [1,2,3].splice(0,1) = [1]
    所以,在红宝书中,这句话也应该修正一下=>添加前提:splice参数有两个时。     
splice()方法始终都会返回一个数组,该数组中包含从原始数组中删除的项(如果没有删除任何
项,则返回一个空数组)——《Javascript高级程序设计》 */
    
    // 获取除了第一项外的所有参数
    var args = Array.prototype.splice.call(arguments,1)
    // 要操作对象为
    var obj = arguments[0]
}

 

三、为什么在函数中使用Array.prototype.splice.call(arguments,1)

如上,是为了获取除了第一项要操作对象中