1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Javascript 面向对象中的构造函数和原型对象

Javascript 面向对象中的构造函数和原型对象

时间:2022-12-18 14:04:30

相关推荐

Javascript 面向对象中的构造函数和原型对象

先解释下原型。每一个Javascript对象(null除外)都和另外一个对象相关联,这个“另外一个对象”就是我们熟知的原型, 每一个对象都从原型继承属性和行为(方法)。

var a = {}; //原型对象为Object.prototypevar array = new Array()// 原型对象为Array.prototypevar myInstance = new MyClass;// 原型对象为MyClass.prototype

在Javascript中,类的所有实例对象都从同一个原型对象上继承属性,下面先看一个例子

function Range是 Range类的构造函数用以初始化新创建的Range类的对象,构造函数并没有创建并返回一个对象,仅仅是初始化,并且在构造函数中用this设置的属性不是每个实例共享的,而是独享的,this是对当前对象的应用。

function Range(from, to) {if(from)this.from = from;//对象的自有属性,在对象中会覆盖从原型那里继承来的from值if(to)this.to = to; }

而所有对象实例都会继承的属性和行为(方法)都在原型对象里

Range.prototype = {includes : function(x) {return this.from <= x && x <= this.to},foreach : function(f) {for(var x = Math.ceil(this.form); x < this.from; x++) f(x);},toString : function() {return "(" + this.from + "......" + this.to + ")";},from : 1,getBeginning : function() {return this.from}}

var r = new Range(2, 5);r.include(3);// true , 3在范围内r.foreach(alert);//输出2 3 4 5console.log(r)//r.getBeginng() // 2 因为在构造函数初始化r的时候已经把属性“from”设置成2了

任何Javascript函数都可以做构造函数,并且用new 关键字调用构造函数时是要用到一个prototype属性的。因此每个javascript函数都会自动拥有一个prototype属性。比如

Range.prototype.init = function () {}nr = new Range.prototype.init();// nr 的属性继承自Range.prototype.init.prototype

原型对象是类的唯一标示,当且仅当两个对象继承自同一个原型对象时,他们才是属于同一个类的实例,而初始化对象的构造函数则不能作为类的标示。 两个构造函数的prototype属性可能指向同一个原型对象,这时通过new调用两个构造函数创建的实例是属于同一个类的。

上面的例子继续修改

Range.prototype.init.prototype = Range.prototype;//引用传递所以不用担心循环引用;

这样通过new Range()和 new Range.prototype.init()创建的对象都是属于Range类的。

console.log((r instanceof Range)); //trueconsole.log((nr instanceof Range)); //true

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。