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
- Javascript例题(持续更新)
- 2-sat入门(例题hdu1814,poj3648)持续更新
- 常用JavaScript代码(持续更新)
- JavaScript学习笔记(持续更新)
- Javascript 兼容性问题(持续更新中)
- 奇怪的Javascript(持续更新)
- [持续更新]JavaScript学习笔记(一)
- [持续更新]JavaScript学习笔记(二)
- [持续更新]JavaScript学习笔记(三)
- [持续更新]JavaScript学习笔记(四)
- [持续更新]JavaScript学习笔记(五)
- [持续更新]JavaScript学习笔记(六)
- [持续更新]JavaScript学习笔记(七)
- [持续更新]JavaScript学习笔记(八)
- Javascript排序算法(持续更新中...)
- JavaScript笔试题(持续更新)
- JavaScript细节 持续更新
- JavaScript学习【持续更新】
- SecureCrt开启会话Log
- Android SQLite Search 紀錄
- Centos设置开机启动Apache和Mysql
- 是真是假?
- 彻底了解JAVA-策略模式(皇室战争是怎样炼成的)
- Javascript例题(持续更新)
- 正则表达式基本语法
- Android透明度换算
- 基于Redis的MessageQueue队列封装
- 中介者模式
- ios9新特性
- 无指针的Splay
- 字符串的截取
- Webpack:模块打包原理