JavaScript基本概念初级讲解论坛贴的学习记录


Posted in Javascript onFebruary 22, 2009

1.关于this对象

view plaincopy to clipboardprint? 
var obj1=new Object(); 
var obj2=new Object(); //给两个对象都添加属性p,并分别等于1和2 
obj1.p=1; 
obj2.p=2; 
//给obj1添加方法,用于显示p的值 
obj1.getP=function(){ 
alert(this.p); //表面上this指针指向的是obj1 
} 
//调用obj1的getP方法,结果显示为1 
obj1.getP(); 
//使obj2的getP方法等于obj1的getP方法 
obj2.getP=obj1.getP; 
//调用obj2的getP方法,结果显示为2 
obj2.getP(); 
var obj1=new Object(); 
var obj2=new Object(); 
//给两个对象都添加属性p,并分别等于1和2 
obj1.p=1; 
obj2.p=2; 
//给obj1添加方法,用于显示p的值 
obj1.getP=function(){ 
alert(this.p); //表面上this指针指向的是obj1 
} 
//调用obj1的getP方法,结果显示为1 
obj1.getP(); 
//使obj2的getP方法等于obj1的getP方法 
obj2.getP=obj1.getP; 
//调用obj2的getP方法,结果显示为2 
obj2.getP();

2.关于函数对象

//增加函数对象方法method1 
Function.prototype.method1=function(){ 
alert("function1"); 
} 
function func1(a,b,c){ 
return a+b+c; 
} 
func1.method1(); //提示:function1 
func1.method1.method1(); //提示:function1 
//增加对象方法getType,既包括普通对象也包括函数对象 
Object.prototype.getType=function(){ 
return typeof(this); 
} 
var array1=new Array(); 
function func1(a,b){ 
return a+b; 
} 
alert(array1.getType()); //提示:object 
alert(func1.getType()); //提示:function 

//func2作为一个对象传递给了func1的形参theFunc,再由func1内部进行theFunc的调用 
function func1(theFunc){ 
theFunc(); 
} 
function func2(){ 
alert("ok"); 
} 
func1(func2); //提示:ok 

//当进行函数调用时,除了指定的参数外,还创建一个隐含的对象arguments 
function func(a,b){ 
alert(a); 
alert(b); 
for(var i=0;i<arguments.length;i++){ 
alert(arguments[i]); 
} 
} 
func(1,2,3); //提示:1,2,3 

/* 
arguments对象的另一个属性是callee, 
它表示对函数对象本身的引用. 
这有利于实现无名函数的递归或者保证函数的封装性. 
*/ 
var sum=function(n){ 
if(1==n) 
return 1; 
else 
return n+arguments.callee(n-1); 
} 
alert(sum(100)); //提示:5050 

/* 
JavaScript为函数对象定义了两个方法:apply和call. 
它们的作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数的方式有所区别: 
以下是引用片段: 
Function.prototype.apply(thisArg,argArray); 
Function.prototype.call(thisArg[,arg1[,arg2…]]); 
从函数原型可以看到,第一个参数都被取名为thisArg, 
即所有函数内部的this指针都会被赋值为thisArg, 
这就实现了将函数作为另外一个对象的方法运行的目的。 
两个方法除了thisArg参数,都是为Function对象传递的参数。 
*/ 
//定义一个函数func1,具有属性p和方法A 
function func1(){ 
this.p="func1-"; 
this.A=function(arg){ 
alert(this.p+arg); 
} 
} 
//定义一个函数func2,具有属性p和方法B 
function func2(){ 
this.p="func2-"; 
this.B=function(arg){ 
alert(this.p+arg); 
} 
} 
var obj1=new func1(); 
var obj2=new func2(); 
obj1.A("byA"); //显示func1-byA 
obj2.B("byB"); //显示func2-byB 
obj1.A.apply(obj2,["byA"]); //显示func2-byA,其中[“byA”]是仅有一个元素的数组,下同 
obj2.B.apply(obj1,["byB"]); //显示func1-byB 
obj1.A.call(obj2,"byA"); //显示func2-byA 
obj2.B.call(obj1,"byB"); //显示func1-byB 
/* 
可以看出,obj1的方法A被绑定到obj2运行后, 
整个函数A的运行环境就转移到了obj2,即this指针指向了obj2。 
同样,obj2的函数B也可以绑定到obj1对象去运行。 
代码的最后4行显示了apply和call函数参数形式的区别。 
*/ 

/* 
与arguments的length属性不同, 
函数对象还有一个属性length, 
它表示函数定义时所指定参数的个数, 
而非调用时实际传递的参数个数 
*/ 
function sum(a,b){ 
return a+b; 
} 
alert(sum.length);
Javascript 相关文章推荐
定义select的边框颜色
Apr 28 Javascript
浅析Js中的单引号与双引号问题
Nov 06 Javascript
使用FlexiGrid实现Extjs表格效果方法分享
Dec 16 Javascript
js中setTimeout()与clearTimeout()用法实例浅析
May 12 Javascript
你所不了解的javascript操作DOM的细节知识点(一)
Jun 17 Javascript
AngularJS中如何使用$http对MongoLab数据表进行增删改查
Jan 23 Javascript
jQuery插件uploadify实现ajax效果的图片上传
Jun 18 Javascript
JSON 必知必会 观后记
Oct 27 Javascript
Vue生命周期示例详解
Apr 12 Javascript
使用淘宝镜像cnpm安装Vue.js的图文教程
May 17 Javascript
解决VUE双向绑定失效的问题
Oct 29 Javascript
解决vue+webpack项目接口跨域出现的问题
Aug 10 Javascript
javascript eval函数深入认识
Feb 21 #Javascript
JavaScript 判断浏览器类型及版本
Feb 21 #Javascript
JavaScript 调试器简介
Feb 21 #Javascript
用jQuery简化JavaScript开发分析
Feb 19 #Javascript
Javascript 同时提交多个Web表单的方法
Feb 19 #Javascript
javascript function、指针及内置对象
Feb 19 #Javascript
csdn 批量接受好友邀请
Feb 19 #Javascript
You might like
PHP正则的Unknown Modifier错误解决方法
2010/03/02 PHP
php数字游戏 计算24算法
2012/06/10 PHP
PHP函数strip_tags的一个bug浅析
2014/05/22 PHP
简单了解WordPress开发中update_option()函数的用法
2016/01/11 PHP
php中Redis的应用--消息传递
2017/03/28 PHP
js图片闪动特效可以控制间隔时间如几分钟闪动一下
2014/08/12 Javascript
JavaScript中的this关键字使用方法总结
2015/03/13 Javascript
JavaScript多图片上传案例
2015/09/28 Javascript
微信小程序 基础组件与导航组件详细介绍
2017/02/21 Javascript
node.js利用redis数据库缓存数据的方法
2017/03/01 Javascript
父组件中vuex方法更新state子组件不能及时更新并渲染的完美解决方法
2018/04/25 Javascript
vue实现移动端悬浮窗效果
2018/12/01 Javascript
JS面向对象编程实现的拖拽功能案例详解
2020/03/03 Javascript
javascript将16进制的字符串转换为10进制整数hex
2020/03/05 Javascript
vue实现拖拽进度条
2021/03/01 Vue.js
[41:08]TNC vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python实现批量下载图片的方法
2015/07/08 Python
python二分查找算法的递归实现方法
2016/05/12 Python
python实现旋转和水平翻转的方法
2018/10/25 Python
python 输出所有大小写字母的方法
2019/01/02 Python
Python3.8中使用f-strings调试
2019/05/22 Python
python 直接赋值和copy的区别详解
2019/08/07 Python
解决Django layui {{}}冲突的问题
2019/08/29 Python
英国领先的NHS批准的在线药店:Pharmacy2U
2017/01/06 全球购物
一套C++笔试题面试题
2012/06/06 面试题
机电专业毕业生求职信
2013/10/27 职场文书
成功经营餐厅的创业计划书范文
2013/12/26 职场文书
迟到检讨书900字
2014/01/14 职场文书
酒店爱岗敬业演讲稿
2014/09/02 职场文书
县长群众路线对照检查材料思想汇报
2014/10/02 职场文书
2015纪念九一八事变84周年演讲稿
2015/03/19 职场文书
大一新生军训新闻稿
2015/07/17 职场文书
幼师必备:幼儿园期末教师评语50条
2019/11/01 职场文书
MySQL连表查询分组去重的实现示例
2021/07/01 MySQL
AudioContext 实现音频可视化(web技术分享)
2022/02/24 Javascript
Python作用域和名称空间的详细介绍
2022/04/13 Python