87,916
社区成员
发帖
与我相关
我的任务
分享
function Animal(){
this.name = "Animal";
this.showName = function(){
alert(this.name);
}
}
/**定义一个Cat类*/
function Cat(){
this.name = "Cat";
}
/**创建两个类对象*/
var animal = new Animal();
var cat = new Cat();
//通过call或apply方法,将原本属于Animal对象的showName()方法交给当前对象cat来使用了。
//输入结果为"Cat"
animal.showName.call(cat,",");
//animal.showName.apply(cat,[]);
animal.showName.call(cat,",");
function add(a,b)
{
alert(a+b);
}
function sub(a,b)
{
alert(a-b);
}
add.call(sub,3,1); //4
var test = 111;
function _add()
{
// this.test = 444; //注释①
alert(this.test);
}
function _sub()
{
this.test = 222;
alert(this.test);
}
_add();
_sub();
_add.call(_sub); //未去掉注释①:undefined 去掉:444
var d = new _add();//结果等同于_add.call(_sub);
var _sub = new function (){
this.test = 222;
alert(this.test);
}
_add.call(_sub)//222
var test = 111;
function _add()
{
this.test = 444; //注释①
this();
alert(this.test);
}
function _sub()
{
this.test = 222;
alert(this.test);
}
_add.call(_sub);
/*
_add.call(_sub)的执行效果:执行_add函数,函数体中的this指向_sub,_sub是个函数对象,它也有它的属性
结果:
_add.call(_sub);
function _add()
{
alert(window.test);//弹出111,与alert(test)一样
this.test = 444; //注释① this指向_sub,为_sub添加了一个test属性,值为444
this();//this指向_sub,执行_sub方法,在_sub方法中,_sub中的this指向window
alert(window.test);//上一句的效果,与alert(test)一样
alert(this.test); //上一句代码为_sub添加test属性,这里等价于alert(_sub.test);弹出444
}
*/
var test = 111;
function _add()
{
this.test = 444; //注释①
alert(this.test);
}
function _sub()
{
this.test = 222;
alert(this.test);
}
_add();//弹出444
_sub();//弹出222
_add.call(_sub);
/*
_add.call(_sub)的执行效果:执行_add函数,函数体中的this指向_sub
结果:
1.函数_sub有一个test属性,即_sub.test=444;
2._add中alert(this.test)中的this指向_sub,弹出444
*/
alert(_sub.test);
var test = 111;
function _add()
{
//this.test = 444; //注释①
alert(this.test);
}
function _sub()
{
this.test = 222;
alert(this.test);
}
_add();//弹出111,_add中this指向window
var d=new _sub();//_sub中this指向d
alert(test);//弹出111 !!!!!!!!
_sub();//弹出222,_sub中的this继续指向window
alert(test);//执行_sub()的结果!!!!!!!!
_add.call(_sub);//_add中this指向_sub,_sub无test属性,undefined
var f1=function(){this.a='类f1的实例的a属性'};
f1.a='对象f1的a属性';
var f2=function(){};//类f2的实例没有a属性
f2.a='对象f2的a属性';
var test=function(){alert(this.a)};
test.call(f1);//弹出'对象f1的a属性'
test.call(new f1());//弹出'类f1的实例的a属性'
test.call(f2);//弹出'对象f2的a属性'
test.call(new f2());//弹出undefined
test.call(f1);//==>test=function(){alert(this.a);}this指向对象f1
test.call(new f1());//==>test=function(){alert(this.a);}this指向类f1的实例