Javascript例题(持续更新)

来源:互联网 发布:淘宝图片怎么拍 编辑:程序博客网 时间:2024/06/05 16:38

<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);//--xalert(b.name);//--balert(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);//--xalert(b.name);//--undefinedalert(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);//--undefinedalert(b.name);//--balert(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.




0 0
原创粉丝点击