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 相关文章推荐
JS实现超炫网页烟花动画效果的方法
Mar 02 Javascript
简单谈谈javascript中的变量、作用域和内存问题
Aug 30 Javascript
js实现仿微博滚动显示信息的效果
Dec 21 Javascript
SublimeText自带格式化代码功能之reindent
Dec 27 Javascript
JavaScript事件处理的方式(三种)
Apr 26 Javascript
有关文件上传 非ajax提交 得到后台数据问题
Oct 12 Javascript
使用JavaScriptCore实现OC和JS交互详解
Mar 28 Javascript
基于Vuex无法观察到值变化的解决方法
Mar 01 Javascript
jquery 实现拖动文件上传加载进度条功能
Mar 18 jQuery
Js中使用正则表达式验证输入是否有特殊字符
Sep 07 Javascript
vue 使用html2canvas将DOM转化为图片的方法
Sep 11 Javascript
react 中父组件与子组件双向绑定问题
May 20 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边学边教》(02.Apache+PHP环境配置――下篇)
2006/12/13 PHP
PHP 生成的XML以FLASH获取为乱码终极解决
2009/08/07 PHP
PHP中SESSION使用中的一点经验总结
2012/03/30 PHP
php生成静态html页面的方法(2种方法)
2015/09/14 PHP
PHP的邮件群发系统phplist配置方法详细总结
2016/03/30 PHP
slice函数的用法 之不错的应用
2006/12/29 Javascript
ie 处理 gif动画 的onload 事件的一个 bug
2007/04/12 Javascript
如何使Chrome控制台支持多行js模式——意外发现
2013/06/13 Javascript
jquery实现华丽的可折角广告代码
2015/09/02 Javascript
基于JS实现PHP的sprintf函数实例
2015/11/14 Javascript
vuejs开发组件分享之H5图片上传、压缩及拍照旋转的问题处理
2017/03/06 Javascript
zTree实现节点修改的实时刷新功能
2017/03/20 Javascript
JS简单判断字符在另一个字符串中出现次数的2种常用方法
2017/04/20 Javascript
bootstrap 通过加减按钮实现输入框组功能
2017/11/15 Javascript
JavaScript设计模式之原型模式分析【ES5与ES6】
2018/07/26 Javascript
详解Js里的for…in和for…of的用法
2019/03/28 Javascript
echarts多条折线图动态分层的实现方法
2019/05/24 Javascript
对Layer弹窗使用及返回数据接收的实例详解
2019/09/26 Javascript
vue和小程序项目中使用iconfont的方法
2020/05/19 Javascript
[03:05]《我与DAC》之xiao8:DAC与BG
2018/03/27 DOTA
使用Python获取Linux系统的各种信息
2014/07/10 Python
Django跨域请求CSRF的方法示例
2018/11/11 Python
python 自定义对象的打印方法
2019/01/12 Python
PyQt QCombobox设置行高的方法
2019/06/20 Python
Python爬虫之urllib基础用法教程
2019/10/12 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
2020/02/29 Python
Python短信轰炸的代码
2020/03/25 Python
详解python datetime模块
2020/08/17 Python
雅诗兰黛美国官网:Estee Lauder美国
2016/07/21 全球购物
大学生求职自荐信
2013/12/12 职场文书
社区学习雷锋活动总结
2014/04/25 职场文书
小学学习委员竞选稿
2015/11/20 职场文书
求职信:会计求职的写作技巧
2019/04/24 职场文书
SQL SERVER中常用日期函数的具体使用
2021/04/08 SQL Server
css3 选择器
2022/05/11 HTML / CSS
在windows server 2012 r2中安装mysql的详细步骤
2022/07/23 Servers