Javascript例题(持续更新)
2017-04-05 10:39
218 查看
<1>例1:关键词:return this,原型
本题重点:
1.普通函数调用时的this指向window
2.构造函数(new obj)调用时的this指向函数自身
例题2.
与第一题区别:把if(name)注释掉。
如果没有if(name),b.name将会输出undefined。因为此时b已经有name属性,但未赋值(没有参数),所以为undefined,若想去他原型找name属性,就要把this.name去掉。
例3:
与例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:
输出:2,2;
aa函数里面的bb没有var,是全局变量。所以不管是aa()还是alert 都是输出2.
例2:
varbb=1;
<3>Key Word:this指向
例1:
输出:undefined
虽然fun是obj.b的一个引用,但是实际上,它引用的是b函数本身,因此此时的fun()其实是一个不带任何修饰的函数调用,所以this指向window。还是<1>中所说的,普通函数调用时的this指向window。
例2:
输出:1
此时的b是被obj调用的,所以this就指向obj,即输出obj中a的值1.
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,html,css学习过程中的小细节。——持续更新——
- 奇怪的Javascript(持续更新)
- Javascript/css 浏览器兼容性[持续更新中]
- javascript 总结(持续更新)
- 常用JavaScript代码(持续更新) 续1
- 详谈js面向对象 javascript oop,持续更新
- 010-Step--- 【20180224 学习】 持续深入玩弄JavaScript(更新)
- 在MyEclipse中使用MyEclipse Javascript Editor的常见问题(持续更新)
- 【JavaScript 基础知识】一篇关于 JavaScript 一些知识点的总结 —— 持续更新
- JavaScript学习笔记(持续更新)
- javascript小白学习指南4--持续更新
- Javascript基础小知识---------持续更新中..............
- JavaScript中的冷知识(持续更新中……)
- 阿里巴巴技术笔试心得《技术之瞳》例题错误答案汇总(持续更新)
- 2-sat入门(例题hdu1814,poj3648)持续更新
- 常用JavaScript代码(持续更新) 续2
- 最常用JavaScript代码(持续更新,精益求精)
- JavaScript中一些你不一定知道的问题(持续更新中。。。。)
- javascript学习笔记---注意知识点(持续更新)
- javaScript封装的常用函数(持续更新中)