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判断浏览器的比较全的代码
Feb 13 Javascript
JS 继承实例分析
Nov 04 Javascript
childNodes.length与children.length的区别
May 14 Javascript
js 变量类型转换常用函数与代码[比较全]
Dec 01 Javascript
使用js正则控制input标签只允许输入的值
Jul 29 Javascript
60个很实用的jQuery代码开发技巧收集
Dec 15 Javascript
node.js操作mongodb学习小结
Apr 25 Javascript
真正好用的js验证上传文件大小的简单方法
Oct 27 Javascript
Angular项目中$scope.$apply()方法的使用详解
Jul 26 Javascript
Bootstrap Table 在指定列中添加下拉框控件并获取所选值
Jul 31 Javascript
JavaScript循环遍历你会用哪些之小结篇
Sep 28 Javascript
Vue之beforeEach非登录不能访问的实现(代码亲测)
Jul 18 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查看session内容的函数
2008/08/27 PHP
一些被忽视的PHP函数(简单整理)
2010/04/30 PHP
跟我学Laravel之路由
2014/10/15 PHP
php版微信返回用户text输入的方法
2016/11/14 PHP
PHP递归实现快速排序的方法示例
2017/12/18 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
laravel实现上传图片的两种方式小结
2019/10/12 PHP
MSN消息提示类
2006/09/05 Javascript
JS注册/移除事件处理程序(ExtJS应用程序设计实战)
2013/05/07 Javascript
node.js 中间件express-session使用详解
2017/05/20 Javascript
bootstrap paginator分页前后台用法示例
2017/06/17 Javascript
微信小程序 空白页重定向解决办法
2017/06/27 Javascript
利用vue和element-ui设置表格内容分页的实例
2018/03/02 Javascript
js字符串倒序的实例代码
2018/11/30 Javascript
详解JavaScript修改注册表的方法
2020/01/05 Javascript
深入讲解Python中的迭代器和生成器
2015/10/26 Python
Python中index()和seek()的用法(详解)
2017/04/27 Python
Python实现针对含中文字符串的截取功能示例
2017/09/22 Python
python实现装饰器、描述符
2018/02/28 Python
如何用python写一个简单的词法分析器
2018/12/18 Python
对Python模块导入时全局变量__all__的作用详解
2019/01/11 Python
PyQt5实现五子棋游戏(人机对弈)
2020/03/24 Python
Django基础知识 web框架的本质详解
2019/07/18 Python
windows下python安装pip方法详解
2020/02/10 Python
python3用urllib抓取贴吧邮箱和QQ实例
2020/03/10 Python
Pyspark获取并处理RDD数据代码实例
2020/03/27 Python
使用Keras 实现查看model weights .h5 文件的内容
2020/06/09 Python
html5 利用canvas手写签名并保存的实现方法
2018/07/12 HTML / CSS
Boden英国官网:英国知名原创时装品牌
2018/11/06 全球购物
华为消费者德国官方网站:HUAWEI德国
2020/11/03 全球购物
JNI的定义
2012/11/25 面试题
机械工程师求职自我评价
2013/09/23 职场文书
采购内勤岗位职责
2013/12/10 职场文书
初中音乐教学反思
2014/01/12 职场文书
2015年法院工作总结范文
2015/04/28 职场文书
django注册用邮箱发送验证码的实现
2021/04/18 Python