`

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); 
	 };
 }

分享到:
评论

相关推荐

    Javascript 设计模式之构造函数模式.zip

    构造函数模式的核心在于使用函数来创建具有相似属性和方法的对象。在JavaScript中,函数可以作为构造函数来调用,通过`new`关键字创建一个新的实例。这种模式允许我们创建自定义类型的对象,而不仅仅是使用内置类型...

    构造函数和实例

    而实例则是使用构造函数创建的具体对象,每个实例都有自己的属性值,但都共享构造函数中定义的方法。 2. 构造函数创建实例的过程: 当我们使用new操作符调用构造函数时,以下步骤会发生: (1)首先创建一个新的...

    javascript指南和函数式编程

    而《JavaScript函数式.zip》可能是一份关于JavaScript函数式编程的资料集合,函数式编程是一种编程范式,强调使用函数和避免改变状态。其中可能涵盖以下知识点: 1. **纯函数**:理解纯函数的定义,即给定相同的...

    define方法和构造函数return对象学习

    本文将深入探讨JavaScript中的构造函数以及如何在构造函数中返回一个对象。在JavaScript编程中,构造函数是一种特殊类型的函数,用于创建和初始化特定类型的新对象。通常情况下,构造函数内部不直接返回值,而是通过...

    JavaScript中的普通函数与构造函数比较

    在构造函数中,this关键字指向新创建的对象实例。而在普通函数中,如果没有明确指定this,则在严格模式下,this是undefined,在非严格模式下,this指向全局对象(在浏览器中是window对象)。 使用new关键字调用构造...

    JavaScript 1.8.5 英文第四章 数组与函数函数属性

    JavaScript 1.8.5 英文第四章 数组与函数函数属性,方法和构造函数

    javascript工厂模式和构造函数模式创建对象方法解析.docx

    - 如果构造函数中有大量非静态的方法定义,则每个实例都会拥有这些方法的独立副本,这会消耗更多的内存。 - 当需要添加新方法时,通常需要通过原型对象来实现,而不是直接在构造函数内部定义。 #### 总结 通过...

    再践javascript对象、原型、属性、构造函数、扩展、json.docx

    在JavaScript中,构造函数通常用于初始化新创建的对象的属性和方法。 - **C#中的构造函数**: - 名称必须与类名相同。 - 没有返回类型。 - 用于初始化对象的状态。 - 通过`new`关键字自动调用。 - 可以定义多...

    Javascript的构造函数和constructor属性

    真正的原因是:一个对象的constructor是它的构造函数的prototype.constructor,而每一个函数都有一个prototype,默认情况下,这个prototype有一个constructor属性,指向的是它自己。 我觉得Javascript的设计本意是让...

    Javascript 构造函数,公有,私有特权和静态成员定义方法

    本文将详细解释JavaScript中构造函数中公有、私有特权成员以及静态成员的定义和使用方法。 构造函数中的成员可以被分为公有成员和私有成员。公有成员指的是那些可以被对象外部访问的属性和方法,而私有成员则是只能...

    JavaScript构造函数详解

    这是一种有效的方式,比在构造函数中直接定义方法效率更高,因为它避免了每个实例都包含方法的副本。然而,在处理大量方法时,通常会用对象字面量的方式直接替换原型对象,这种方式更简洁,但会丢失constructor属性...

    Javascript函数与对象

    构造函数用于创建新对象,而原型则定义了对象的行为和属性。 ```javascript function Person(name) { this.name = name; } Person.prototype.greet = function() { console.log(`Hello, my name is ${this.name}`...

    深入理解javascript构造函数和原型对象

    在深入理解JavaScript的过程中,构造函数和原型对象是两个核心概念。JavaScript是一种基于对象(Object-based)和原型(Prototype-based)的语言,其对象模型与传统的基于类(Class-based)语言有所不同。理解构造...

    Javascript 构造函数详解

    总结来说,JavaScript中的构造函数是构建复杂对象和实现面向对象特性的重要工具。理解它们的工作原理,以及如何有效地使用构造函数,对于提升JavaScript编程能力至关重要。通过合理地使用构造函数,我们可以创建可...

    深度探讨javascript函数的原型链和闭包

    JavaScript的灵活性使得函数可以作为变量、对象的方法甚至构造函数使用。理解函数的原型链和闭包对于深入掌握JavaScript至关重要。 首先,让我们看看函数的定义方式。在JavaScript中,我们可以使用`function`关键字...

    js定义类 对象 构造函数,类的继承

    在JavaScript中,类(Class)、对象(Object)和构造函数(Constructor)是面向对象编程的基础。这篇文章将深入探讨这三个概念,以及如何实现类的继承。 首先,让我们理解什么是JavaScript中的对象。在JavaScript中...

    JavaScript函数的特性与应用实践深入详解

    首先,JavaScript函数是一种对象,这使得它们拥有对象的所有属性和方法。函数对象连接到Function.prototype,而这个对象本身又连接到Object.prototype。在创建函数时,JavaScript引擎会为每个函数添加两个隐藏属性:...

    javascript组合使用构造函数模式和原型模式实例.docx

    在JavaScript编程中,构造函数模式和原型模式是两种常见的面向对象编程(OOP)方式。这两种模式各有优势,结合使用能够更好地实现代码复用和封装,提高代码的可维护性和扩展性。 #### 二、构造函数模式 构造函数模式...

    JavaScript中函数对象调用模式总结

    每个对象都有一个 `__proto__` 属性,指向其构造函数的原型对象,原型对象又有一个 `__proto__` 属性,直到找到 `null`,形成一条链。我们可以通过 `prototype` 属性来修改构造函数的原型,从而影响实例对象。 了解...

Global site tag (gtag.js) - Google Analytics