属性:callee 指针,指向拥有这个arguments对象的函数 作用:解耦
例子:迭代
function factorial(num) {
if(num<=1){
return 1
}else{
return ( num*arguments.callee(num-1))
}
}
console.log(factorial(4))//24
this对象:函数内部对象,引用的是函数执行的环境对象 在全局作用域执行函数时this为全局对象(window)
window.color='red'
var o={color:'blue',}
function sayColor(){alert(this.color)}
sayColor()//red
o.sayColor=sayColor
0.sayColor()//blue 看this引用的谁
caller属性:指向调用当前函数的函数保存着调用当前函数的函数的引用
function a(){
b()
}
function b(){
alert(b.caller)
}
b()//输出a函数体
apply()和call(): 作用:修改函数this的指向(修改上下文),拓展函数的作用域,对象与方法解耦 区别:传参 apply(要修改的指向,参数数组/arguments对象)
call(要求改成的指向,arg1,arg2...)
例子:哑巴说话
function PersonWei() {
}
PersonWei.prototype={
country:'Wei',
sayCountry:function () {
console.log('I am form '+this.country)
},
}
var xuShu={
country:'Shu',
}
var caoCao=new PersonWei()
caoCao.sayCountry()// I am form Wei
caoCao.sayCountry.call(xuShu)//I am form Shu
不知道这样做合不合理,定义了一个表示魏国人的构造函数PersonWei(),它具有属性:country和方法sayCountry(),然后实例了一个caoCao(曹操),我们想要帮xuShu(徐庶)说出自己的国家:caoCao.sayCountry.call(xuShu)让caoCao的this指向变为xuShu(借尸还魂?脑洞大开,应该就是鬼上身,借用你的身体来实现他的行为),这时候this.conutry 中的this指向的就是xuShu对象了,因此结果是 I am form Shu
function cat(name){ //cat是一个对象this.name=name //this.name是猫的属性
this.eat=function(){ //this.eat是猫的方法(方法即使函数)
//喝牛奶
}
}
var a=new cat("puck")//创建了一只名叫帕克的猫
a.eat()//调用帕克的方法
function fn(){ //这也是方法。
}
简单,我来说一下吧,var
obj=new
Object()是一个空对象,等同于var
obj={},注意,这里只是说,他们的功能一样,实际上alert(new
Object()≠{})//false
这个对象没有任何方法和属性,因此,你可以为其添加任何的属性和方法。
比如:obj.name='你好';alert(obj.name)