您的位置:首页 > Web前端 > JavaScript

Javascript例题(持续更新)

2017-04-05 10:39 218 查看
<1>例1:关键词:return this,原型

function obj(name) {
if(name){
this.name=name;

}

//return name;
return this;
}
obj.prototype.name="b";
var x=obj("x");
var b=new obj;
alert(x.name);//--x
alert(b.name);//--b
alert(window.name);//--x


var x=obj("x");是普通函数的调用,普通函数调用后的this就指向了window,通过obj("x")调用,返回this的引用,此时x就等于window对象,相当于也同时给window.name赋了值x。


var b=new obj;是构造函数,构造函数调用时,this指向函数自身,但是现在的实例并没有name属性,所以要去他的原型上找,又因为obj.prototype.name="b",自然b.name输出b。  


本题重点:

1.普通函数调用时的this指向window

2.构造函数(new obj)调用时的this指向函数自身

例题2.

function obj(name) {
//if(name){
this.name=name;
// }
//return name;
return this;
}
obj.prototype.name="b";
var x=obj("x");
var b=new obj;
alert(x.name);//--x
alert(b.name);//--undefined
alert(window.name);//--x


与第一题区别:把if(name)注释掉。

如果没有if(name),b.name将会输出undefined。因为此时b已经有name属性,但未赋值(没有参数),所以为undefined,若想去他原型找name属性,就要把this.name去掉。

例3:

function obj(name) {
if(name){
this.name=name;
}
return name;
//return this;
}
obj.prototype.name="b";
var x=obj("x");
var b=new obj;
alert(x.name);//--undefined
alert(b.name);//--b
alert(window.name);//--x


与例1区别:return。

这个x调用函数的时候,只是返回了name,里面this.name相当于window.name=name;也就是说,x是没有给obj里面name赋值的,而是把“x”赋值给了window。若想要x.name有输出实际内容,必须自己定义。eg:在19行和20行中间加一句x.name=“blabla”,再alert(x.name)就会输出“blabla”。

<2>Key word:局部变量,全局变量

例1:

var bb = 1;
function aa() {
bb = 2;
alert(bb);
};
aa();
alert(bb);

输出:2,2;

aa函数里面的bb没有var,是全局变量。所以不管是aa()还是alert 都是输出2.

例2:

varbb=1;

function aa(bb) {
bb = 2;
alert(bb);
};
aa();
alert(bb);

输出:2,1

虽然在函数里面bb没有用var定义,按理说应该是全局的,但是函数声明的时候带了一个参数bb,相当于在函数体内声明了var bb,bb就成为了函数aa的活动对象,当执行完函数时,会被自动销毁,alert时执行流就会再进入window中,此时bb就为1了。


<3>Key Word:this指向

例1:

var obj={
a:1,
b:function () {
alert(this.a);
}
};
var fun=obj.b;
fun();

输出:undefined

虽然fun是obj.b的一个引用,但是实际上,它引用的是b函数本身,因此此时的fun()其实是一个不带任何修饰的函数调用,所以this指向window。还是<1>中所说的,普通函数调用时的this指向window。

例2:

var obj={
a:1,
b:function () {
alert(this.a);
}
};
obj.b();

输出:1

此时的b是被obj调用的,所以this就指向obj,即输出obj中a的值1.



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript 函数