function fruits(){}
fruits.prototype = {
color:"red",
say:function(){
console.log(this.color)
}
}
var apple = new fruits()
apple.say()
// 但是如果我们有一个对象banana= {color : "yellow"} ,我们不想对它重新定义 say 方法
var banana ={
color:"yellow"
}
apple.say.call(banana)
apple.say.apply(banana)
//apply、call实例
// 数组之间追加
var array1 = [12 , "foo" , {name:"Joe"} , -2458];
var array2 = ["Doe" , 555 , 100];
Array.prototype.push.apply(array1, array2);
console.log("array1:"+array1)
// 获取数组中的最大值和最小值
var numbers = [5, 458 , 120 , -215 ];
var maxNumbers1 = Math.max.apply(Math,numbers)
var maxNumbers2 = Math.max.call(Math,5, 458 , 120 , -215)
console.log("maxNumbers1:"+maxNumbers1)
console.log("maxNumbers2:"+maxNumbers2)
// 验证是否是数组(前提是toString()方法没有被重写过)
function isArray(obj){
return Object.prototype.toString.call(obj) === "[object Array]"
}
console.log(isArray(numbers))
// 类(伪)数组使用数组方法
var documents = Array.prototype.slice.call(document.getElementsByTagName("*"))
console.log(documents)
// 面试题
// 定义一个 log 方法,让它可以代理 console.log 方法,常见的解决方法是:
// function log(msg){
// console.log(msg)
// }
// log(1)
// 当传入参数的个数是不确定
// function log(){
// console.log.apply(console,arguments)
// }
// log(1,2)
// 给每一个 log 消息添加一个"(app)"的前辍
// function log(){
// var args = Array.prototype.slice.call(arguments)
// args.unshift("(app)")
// console.log.apply(console,args)
// }
// log("Hello World")
// bind
// var altwrite = document.write;
// altwrite("hello")
// altwrite()函数改变this的指向global或window对象,导致执行时提示非法调用异常,正确的方案就是使用bind()方法:
var altwrite = document.write;
// altwrite.bind(document)("Hello")
altwrite.call(document,"Hello")
console.log("---------绑定函数---------")
// 绑定函数
this.num = 9
var mymodule = {
num:81,
getNum:function(){
console.log(this.num)
}
}
mymodule.getNum()
var getNum = mymodule.getNum;
getNum()
var bindGetNum = getNum.bind(mymodule)
bindGetNum()
js:apply、call、bind
猜你喜欢
转载自blog.csdn.net/u012687612/article/details/111479809
今日推荐
周排行