js中对象,函数,属性,方法是一种怎样的联系

JavaScript013

js中对象,函数,属性,方法是一种怎样的联系,第1张

function cat(name){ //cat是一个对象

this.name=name //this.name是猫的属性

this.eat=function(){ //this.eat是猫的方法(方法即使函数)

//喝牛奶

}

}

var a=new cat("puck")//创建了一只名叫帕克的猫

a.eat()//调用帕克的方法

function fn(){ //这也是方法。

}

arguments对象:函数内部对象,传入函数中所有参数的集合,类数组对象

属性: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

几种情况把。

你可以把c作为a()的返回值返回给a,然后你就可以在b中用c了:

 function a(){ 

 var c=2

 //

 return c;

 } 

 

 function b(){

 var c = a()//a返回的就是c的值

 }

2.如果b函数是a函数的内部函数的话可以直接用:

function a(){ 

 var c=2

 //

 function b(){ var d = c}

 }

3.如果a和c没有从属关系,那么可以利用闭包,来让外部函数调用其他函数的局部变量:

function a(){ 

    var c=2

    return function(){

      alert(c)

    }

 } 

 var b = a()

 b()//ok函数引用了a里面的变量c

希望对你有帮助!