Javascript例题(持续更新)

<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.




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值