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);
复制代码 代码如下:
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);
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“JavaScript基本概念初级讲解论坛贴的学习记录”评论...
更新动态
2024年11月13日
2024年11月13日
- 群星《唱给女人的歌》24K德国HD金碟[WAV+CUE]
- 孙燕姿.2011-是时候【美妙音乐】【WAV+CUE】
- 苏芮.2003-回首·时代全经典2CD【华纳】【WAV+CUE】
- 梁咏琪.1996-爱自己【EEI】【WAV+CUE】
- IGN经典逆天骚操作名著——《墙头草修炼手册》
- 突然爆火的“网红游戏”,真的有那么多人玩吗?
- 何老师客串《浪人崛起》了?盘点与明星撞脸的角色!
- 【原神】关于星鹫赤羽对珐芙琴班配队下珐露珊主C的适配度分析
- 【原神】V5.1攻略 | 迪西雅角色简评
- 【原神】大日御舆顶端怎么上去
- 胥拉齐《感谢有你》DTS-WAV
- 罗海英《金牌歌后》【WAV+CUE】
- 林叶《林叶·夜》【WAV/分轨】
- 群星《国语经典名曲01》音乐磁场系列[WAV+CUE][1G]
- 齐豫《滚石24K》24K金碟珍藏版系列[低速原抓WAV+分轨][1G]