记录一下工作中的问题,顺便整理思路
程序员文章站
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)
如上,是为了获取除了第一项要操作对象中
上一篇: php中apc缓存使用示例