摘要:举个例子,现在有一个叫做的构造函数,表示猫对象的原型。不受的影响但是通过上面的例子你会发现用构造函数生成实例对象,它有一个缺点,那就是无法共享属性和方法。
在Javascript语言中,new命令后面跟的不是类,而是构造函数。
举个例子,现在有一个叫做CAT的构造函数,表示猫对象的原型。
function CAT(name){ this.name = name; this.age = 3; }
当我们new这个构造函数的时候,就会生成一个猫对象的实例。
var Tom = new CAT("Tom"); var Jack = new CAT("Jack"); Tom.age = 5; alert(Tom.name+","+Tom.age); //Tom,5 alert(Jack.name+","+Jack.age); //Jack,3 不受Tom的影响
但是通过上面的例子你会发现:用构造函数生成实例对象,它有一个缺点,那就是无法共享属性和方法。
因为这两个对象的age属性是独立的,修改其中一个,不会影响到另一个。
这样做的坏处就是会造成资源浪费,那么我们要如何来解决这件事呢,那就需要prototype出场了。
这个属性包含一个对象(以下简称"prototype对象"),所有实例对象需要共享的属性和方法,都放在这个对象里面;那些不需要共享的属性和方法,就放在构造函数里面。
CAT的代码利用prototype就可以改写成这样子了: function CAT(name){ this.name = name; } CAT.prototype.age = 3; var Tom = new CAT("Tom"); var Jack = new CAT("Jack"); CAT.prototype.age = 5; alert(Tom.name+","+Tom.age); //Tom,5 alert(Jack.name+","+Jack.age); //Jack,5
age属性放在prototype对象里,是两个实例对象共享的。只要修改了prototype对象,就会同时影响到两个实例对象。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/78324.html
摘要:代码传送门如上代码示例,从其运行结果可知,是等于的原型的,是被对象后返回的函数,从验证结果来看,函数经过的一层包装,依然不会影响其原型检测的绑定。前言 在面向对象语言中,一般都有关键字 instanceof 来检测对象类型,更准确点来说是检测对象是哪个类型的实例。那么在 JS 中这个关键字又有什么不同之处呢?此文仅是一篇对 ES 标准中 instanceof 关键字的解读,并记录了在此过程中...
阅读 2812·2023-04-25 20:06
阅读 1430·2021-08-26 14:15
阅读 2183·2021-08-12 13:27
阅读 1744·2019-08-30 15:55
阅读 3431·2019-08-30 13:20
阅读 2801·2019-08-29 15:12
阅读 3308·2019-08-29 15:06
阅读 2837·2019-08-29 14:13