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

[b]1. length属性[/b]
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



[b]2.prototype 属性[/b]
每个函数都包含一个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



[b]3. call() 和 apply()方法[/b]
语法: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.

[b]4 bind()方法[/b]
它的主要作用是将函数绑定到某个对象。当在函数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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值