Javascript 函数中的属性、方法和构造函数

1. length属性
length代表函数定义时参数(形参)的个数。arguement.length代码实际传入参数(实参)的个数
function check(args){
	var actual = args.length;
	var expected = args.callee.length;
	if(actual!==expected){
		document.writeln('Execped ' + expected + ', got ' +actual);
		//throw Error('Execped ' + expected+ ', got ' +actual);
		//return 'Execped ' + expected+ ', got ' +actual;
	}
}
function add3(x,y,z){
	check(arguments);
	return x+y+z; //再执行后面的逻辑
}
add3(2,4,6,8); //=>Execped 3, got 4 



2.prototype 属性
每个函数都包含一个prototype属性,它指向一个对象的应用,这个对象是原型对象。当将函数用作构造函数时,新创建的对象会从原型对象上继承属性和方法。
//使用prototype扩充Javascript的类
/*Javascript基于原型机制是动态的:对象从其原型继承属性,如果创建对象之后原型的属性发生改变,也会影响到继承这个原型的所有
实例。这意味这我们可以通过给原型添加新方法来扩充Javascript。*/
//这个方法用于去除字符串开头和结尾的空格
String.prototype.trim=String.prototype.trim || function(){ 
	if(!this) return this; //空字符串不做处理
	return this.replace(/^\s+|\s+$/g,'');
};
Function.prototype.getName=function(){
	//如果函数中有name属性就返回name的值,否则取'function'和'('之间的字符
	return this.name || this.toString().match('/function\s*([^()*]\(')[1]; 
};
var ggg=' sggg   ';
document.writeln(ggg.trim()+ggg.trim()); //=> sgggsggg
function funct(){};
document.writeln(funct.getName()); //=>funct



3. call() 和 apply()方法
语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]])
定义:调用一个对象的一个方法,以另一个对象替换当前对象。
说明:
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
语法:apply([thisObj[,argArray]])
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
说明:
如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。
如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。
//使用两个 call 就实现多重继承了
function bird(){
	this.fly=function(){
		document.writeln('fly...');
	}
}
function human(){
	this.speak=function(){
		document.writeln('speak...');
	}
}
function animal(){
	bird.call(this); //将bird的方法放到this(此时代表animal)上执行
	human.call(this); //将human的方法放到this(此时代表animal)上执行
}
var niaoren =new animal();
niaoren.fly();
niaoren.speak();
//当然,js的继承还有其他方法,例如使用原型链,这个不属于本文的范畴,只是在此说明call 的用法。

说了call ,当然还有 apply,这两个方法基本上是一个意思,区别在于 call 的第二个参数可以是任意类型,而apply的第二个参数必须是数组,也可以是arguments.

4 bind()方法
它的主要作用是将函数绑定到某个对象。当在函数f()上调用bind()方法并传入一个对象o作为参数,这个方法将返回一个新的函数。(以函数调用方式)调用新的函数将会把原始的函数f()当做o的方法来调用,传入新函数的任何实参都将传入原始函数。
 function f(y){return this.x+y}; //待绑定的函数 
 var o={x:1};  //将要绑定的对象
 var g=f.bind(o);
 document.writeln(g(2)); //=>3  //通过g(2)来调用o.f(2)
 //另一种绑定
 function bind(f,o){
	 if(f.bind) return f.bind(o); //如果bind()存在,使用bind();
	 else return function(){ //否则这样绑定
		return f.apply(o, arguments); 
	 };
 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_26182553

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值