当前位置: 首页 > 图文教程 > 网络编程 > Javascript > JavaScript基本概念初级讲解论坛贴的学习记录

Javascript
js select 标签选定项的值获取代码
js GridView 实现自动计算操作代码
Discuz 公告效果(自动换行,无间隙滚动)
js 动态添加标签(新增一行,其实很简单,就是几个函数的应用)
JS 常用校验函数
HTML代码中标签的全部属性 中文注释说明
input 高级限制级用法
js onpropertychange输入框 事件获取属性
Javascript 生成无限下拉列表实现代码
javascript 极速 隐藏/显示万行表格列只需 60毫秒
用JavaScript实现单继承和多继承的简单方法
javascript 闭包函数做显隐内容
js 页面模块自由拖动实例
js Flash插入函数免激活代码
setTimeout 不断吐食CPU的问题分析
说说掌握JavaScript语言的思想前提想学习js的朋友可以看看
js 浏览器版本及版本号判断函数2009年
Javascript 原型和继承(Prototypes and Inheritance)
HTML 自动伸缩的表格Table js实现
两个INPUT同步输入的方法小结 兼容IE和firefox

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-12   浏览: 218 ::
收藏到网摘: n/a

JavaScript基本概念 论坛贴建议大家看下,都是一些js的高级的技巧知识小结。 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);