Javascript中的构造函数与原型

构造函数

构造函数,是一种特殊的方法。主要用来创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数,可根据其参数个数的不同或参数类型的不同来区分它们即构造函数的重载。

示例:

<span style="font-size:18px;">function Box(name,age)
{
	this.name=name;
	this.age=age;
	this.run=function(){
		return this.name+this.age+'运行中。。。';
	};
}

var box1=new Box('Lee',100);
var box2=new Box('Jack',200);

alert(box1.run());
alert(box1 instanceof Box);
</span>

下面我们来用途看一下构造函数的声明函数。

原型

我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个对象,它的用途是包含可以由特定类型的所有实例共享的属性和方法。

使用原型的好处可以让所有对象实例共享它所包含的属性和方法。

示例:

<span style="font-size:18px;">function Box(){}
		Box.prototype.name='Lee';
		Box.prototype.age=100;
		Box.prototype.run=function()
		{
			return this.name+this.age+'运行中。。。'
		};
//下面比较一下原型内的方法地址是否一致:
var box1=new Box();
var box2=new Box();
alert(box1.run==box2.run);	 //返回的结果为true,说明它们的引用地址是一样的。
</span>

用图来看一下原型的声明方式

由图中可以知道,构造函数是在内存中有创建了一个实例,增加了内存占用。而原型模式则是共用了属性和方法,则可以减轻内存的负担。

当然,原型模式创建对象也有自己的缺点,原型中所有属性是被很多实例共享的,共享对于函数非常合适,对于包含基本值得属性也还可以。 但是有的每次实例化的数据需要保留自己的特性,不能共享。这就造成了矛盾。

构造函数+原型模式

为了解决这个问题,可以组合构造函数+原型模式。

<span style="font-size:18px;">function Box(name,age)		//不共享的使用构造函数
{
	this.name=name;
	this.age=age;
	this.family=['父亲','母亲','妹妹'];
};

Box.prototype={				//共享的使用原型
	constructor:Box,
	run:function(){
		return this.name+this.age+this.family;
	}
};
</span>

通过对不共享的属性使用构造函数,而对于共享的方法,则用原型,就很好的解决了传参和引用共享的问题。

总结:

JavaScript中的面向对象和.net中的面向对象是差不多的,只是表现形式不同了而已。对比起来还是差不多的。当然,现在还是初次学习,以后还要更不断的学习,来加深认识。

时间: 2024-10-18 06:11:28

Javascript中的构造函数与原型的相关文章

javascript中的构造函数和原型及原型链

纯属个人理解,有错误的地方希望大牛指出,以免误人子弟 1.构造函数: 构造函数的作用 : 初始化由new创建出来的对象    new 的作用: 创建对象(空对象) new 后面跟的是函数调用,使用new来调用函数,跟普通的直接调用函数主要的不同: 就是 this 的指向不同了 , 再就是 会自动的返回新创建的对象 什么是原型?        原型的作用:就是为了实现继承!  一个对象的原型就是它的构造函数的prototype属性的值. 在讨论原型的时候,是指的 对象和原型对关系 prototyp

Javascript中的对象和原型(3)

在Javascript中的对象和原型(二)中我们提到,用构造函数创建的对象里面,每个对象之间都是独立的,这样就会降低系统资源的利用率,解决这样问题,我们就要用到下面提到的原型对象. 一 原型对象 原型对象实际上就是构造函数的一个实例对象,和普通的实例对象没有本质上的区别.可以包含特定类型的所有实例的共享属性或者方法.这样,如果我们需要修改所有实例中的属性或者方法,就只需要修改一处,就能够影响到所有实例了.因为原型中的属性和方法是共享的.我们可以看下两个图示:       构造函数方式 原型模式方

JavaScript中的构造函数和工厂函数

JavaScript中的工厂函数 1 function crateHero (name,blood,weapoon) { 2 var o = new Object(); 3 o.name = name; 4 o.blood = blood; 5 o.weapoon = weapoon; 6 o.attch = function () { 7 console.log(this.name+"用"+this.weapoon+"进行了攻击"); 8 } 9 return o

JavaScript中的继承与原型链

先看一个例子 function User(){} var u1 = new User(); console.log(u1.prototype);// undefined 使用对象实例无法访问到prototype console.log(User.prototype);//{},使用构造函数名访问prototype console.log(u1.__proto__);//{},使用对象实例访问prototype的指针 这个是 __proto__ 和prototype最基本的区别:说明构造的对象无p

JavaScript中的继承(原型链)

一.原型链 ECMAScript中将原型链作为实现继承的主要方法,基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法. 实例1: function SupType() { this.property = true; } SupType.prototype.getSupvalue = function() { return this.property; }; function SubType() { this.subproperty = false; } //原型对象等于一个类型的实例

Javascript中的对象和原型

一 原型对象 原型对象实际上就是构造函数的一个实例对象,和普通的实例对象没有本质上的区别.可以包含特定类型的所有实例的共享属性或者方法.这样,如果我们需要修改所有实例中的属性或者方法,就只需要修改一处,就能够影响到所有实例了.因为原型中的属性和方法是共享的.我们可以看下两个图示:       构造函数方式 原型模式方式 从上面的图示中我们就不难看出,为何下面的代码中"user1.show == user2.show;"返回的是ture,因为show方法是所有由User构造函数创建的对象

Javascript中获取对象的原型对象

在Javascript中,如果我们有一个对象但是又不知道它的构造函数时,如何获取它的原型对象呢? 在Chrome中或是FireFox浏览器中,我们可以直接使用对象的__proto__属性获取它的原型对象. <!-- lang: js --> function F(){}; var foo = new F(); alert(foo.__proto__ == F.prototype); 但是,__proto__属性在IE浏览器中一直到IE11才被支持. 那么在不支持__proto__属性的浏览器中

JavaScript中的构造函数

function Accom(){};    //创建一个构造函数 //创建两个对象 var house=new Accom(); var apartment=new Accom(); 通过构造函数创建的对象有一个属性constructor,这个属性指向创建该对象时所用的Javascript构造函数. house.constructor===Accom;  或者   house instanceof Accom;     //true JavaScript中的每个构造函数都有一个prototyp

JavaScript中以构造函数的方式调用函数

转自:http://www.cnblogs.com/Saints/p/6012188.html 构造器函数(Constructor functions)的定义和任何其它函数一样,我们可以使用函数声明.函数表达式或者函数构造器(见以前的随笔)等方式来构造函数对象.函数构造器和其它函数的区别在与它们的调用方式不同. 要以构造函数的方式调用函数,只需要在调用时在函数名称前加new 关键字,比如:function whatsMyContext(){ return this; }; 调用:new what