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代码
Dec 15 Javascript
JQuery实现的在新窗口打开链接的方法小结
Apr 22 Javascript
js实现带缓冲效果的仿QQ面板折叠菜单代码
Sep 06 Javascript
jQuery+CSS3实现3D立方体旋转效果
Nov 10 Javascript
jQuery EasyUI Tab 选项卡问题小结
Aug 16 Javascript
jQuery过滤选择器经典应用
Aug 18 Javascript
ES6中Math对象的部分扩展
Feb 20 Javascript
Javascript中的getter和setter初识
Aug 17 Javascript
把JavaScript代码改成ES6语法不完全指南(分享)
Sep 10 Javascript
Vue-router 中hash模式和history模式的区别
Jul 24 Javascript
最全vue的vue-amap使用高德地图插件画多边形范围的示例代码
Jul 17 Javascript
node.js如何操作MySQL数据库
Oct 29 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 Token(令牌)设计
2008/03/15 PHP
YII Framework教程之异常处理详解
2016/03/14 PHP
PHP使用PDO实现mysql防注入功能详解
2019/12/20 PHP
js对象之JS入门之Array对象操作小结
2011/01/09 Javascript
js 事件处理函数间的Event物件是否全等
2011/04/08 Javascript
JavaScript 模拟类机制及私有变量的方法及思路
2013/07/10 Javascript
zTree插件之多选下拉菜单实例代码
2013/11/06 Javascript
JavaScript类属性的访问方式详解
2014/02/11 Javascript
js调试工具Console命令详解
2014/10/21 Javascript
JavaScript基础知识学习笔记
2014/12/02 Javascript
javascript正则表达式基础知识入门
2015/04/20 Javascript
JS实现表单多文件上传样式美化支持选中文件后删除相关项
2016/09/30 Javascript
利用node实现一个批量重命名文件的函数
2017/12/21 Javascript
原生JavaScript实现留言板
2021/01/10 Javascript
[01:13]这,就是刀塔
2014/07/16 DOTA
Python实现Const详解
2015/01/27 Python
使用python实现rsa算法代码
2016/02/17 Python
spyder常用快捷键(分享)
2017/07/19 Python
WxPython建立批量录入框窗口
2019/02/27 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
2019/06/12 Python
基于TensorFlow常量、序列以及随机值生成实例
2020/01/04 Python
将pycharm配置为matlab或者spyder的用法说明
2020/06/08 Python
pycharm中leetcode插件使用图文详解
2020/12/07 Python
CSS3 中filter(滤镜)属性使用详解
2020/04/07 HTML / CSS
马来西亚演唱会订票网站:StubHub马来西亚
2018/10/18 全球购物
英国的领先快速时尚零售商:In The Style
2019/03/25 全球购物
高校学生干部的自我评价分享
2013/11/04 职场文书
精彩的大学生自我评价
2013/11/17 职场文书
社会保险接收函
2014/01/12 职场文书
2014年巴西世界杯口号
2014/06/05 职场文书
学校春季防火方案
2014/06/08 职场文书
销售类求职信
2014/06/13 职场文书
简易离婚协议书范本
2014/10/24 职场文书
拾金不昧表扬信
2015/01/16 职场文书
安全生产先进个人总结
2015/02/15 职场文书
关于redisson缓存序列化几枚大坑说明
2021/08/04 Redis