- function SuperType(){}
- SuperType.prototype.name = 'Sam';//在SuperType.prototype指向的对象上增加了name属性
- //在SuperType.prototype指向的对象上增加了sayName方法
- SuperType.prototype.sayName = function() {
- document.write(this.name);
- };
- SuperType.prototype.setName = function(name) {
- SuperType.prototype.name = name;
- };
- var instance1 = new SuperType();
- var instance2 = new SuperType();
- instance1.sayName();//Sam
- instance2.sayName();//Sam
- instance1.setName('Luce');
- instance1.sayName();//Luce
- instance2.sayName();//Luce
当实例instance1调用setName()函数更改了SuperType.prototype.name的值 后,instance2.sayName()也会输出Luce,说明SuperType.prototype指向的对象的确是“包含了可以由特定类型(这 里是SuperType)的所有实例所共享的属性和方法”,所以由此可以得出结论:
SuperType.prototype指向的就是SuperType的原型对象,也即是函数的prototype属性指向了函数的原型对象。
- function b(){};
- b.prototype.name='name1';
- b.prototype.sayName = function(){
- console.log(this.name);
- };
- b.prototype.setName = function(p){
- this.name = p;
- };
- var a = new b();
- var c = new b();
- a.sayName();
- c.sayName();
- a.setName('wen');
- a.sayName();
- c.sayName();
结果是:
name1
wen
name1
你看你写的和我写的一不一样?你在方法sayName()和setName()里面引用的是this.name,在这里this指 向的是a和b对象,所以this.name访问的就是a.name或者b.name。就是说你这里this.name访问的是实例上的name属性,而不 是prototype所指向的原型对象上的name属性。 Javascript有个特点,就是当实例调用某个属性的时候,它会先在实例中找,如果找到就返回,否则继续在原型对象上找,找到再放回。在这里,当你访 问this.name的时候,由于没有在实例(a和b)中定义name属性,所以它就继续在原型对象上找,而原型对象上定义了name,所以第一次调用 a.sayName(); c.sayName(); 就会返回原型对象上定义的name属性,所以就返回了name1。而当你调用 a.setName('wen'); 的时候,this.name被换成了a.name,你实际上是在a对象上定义了name属性,而不是在原型对象上,所以该属性就不会是共享的,只有a所 有,所以a.sayName()就会返回wen(因为实例中有name,就不再搜索原型对象了)。而最后调用c.sayName();因为c中没有 name属性,所以它就到原型对象上找,所以就输出了原型对象上的name。
相关推荐
javascript原型继承工作原理和实例详解_.docx
主要介绍了JavaScript原型链与继承操作,结合实例形式总结分析了javascript原形链与继承的相关概念、使用方法及操作注意事项,需要的朋友可以参考下
本文实例分析了Javascript原型链的原理。分享给大家供大家参考,具体如下: 一、JavaScript原型链 ECMAScript中描述了原型链的概念,并将原型链作为实现继承的主要方法。其基本思想是利用原型让一个引用类型继承另一...
概述 原型模式是指原型实例指向创建对象的种类,并通过拷贝这些原型创建新的对象,是一种用来创建对象的模式,也就是创建一个对象作为另一个对象的prototype属性; prototype警告:学习了解原型模式前需先学习...
javascript组合使用构造函数模式和原型模式实例.docx
主要介绍了javascript 原型与原型链的理解及应用,结合实例形式分析了javascript原型与原型链的具体原理、功能、使用方法及操作注意事项,需要的朋友可以参考下
本文实例讲述了javascript原型模式用法。分享给大家供大家参考。具体分析如下: 一般在了解了工厂模式和构造函数模式的弊端之后,就知道为什么需要原型模式了 原型模式i的定义:每个函数都有一个prototype(原型)...
对于javascript原型链,以前都觉得是个很深的东西,一直没有理解很明白,今天看了一些介绍后,发现这张图,表示再没有什么语言能比这张图说得清楚了。 看了这张图后突然对javascript有了质的理解。 javascript的...
举例说明JavaScript中的实例对象与原型对象_.docx
在上一篇文章中,介绍了原型的概念,了解到在javascript中构造函数、原型对象、实例三个好基友之间的关系:每一个构造函数都有一个“守护神”——原型对象,原型对象心里面也存着一个构造函数的“位置”,两情相悦,...
主要介绍了javascript 原型与原型链的理解,结合实例形式分析了javascript 原型与原型链的原理、使用方法及相关操作注意事项,需要的朋友可以参考下
主要介绍了javascript原型链继承用法,实例分析了javascript原型链继承中的技巧与相关注意事项,非常具有实用价值,需要的朋友可以参考下
源文件程序天下JAVASCRIPT实例自学手册 第1章 JavaScript语言概述 1.1 JavaScript是什么 1.1.1 JavaScript简史 1.1.2 JavaScript有何特点 1.2 JavaScript能做什么 1.2.1 表单数据合法性验证 1.2.2 页面特效 1.2.3 ...
本文实例讲述了JavaScript原型对象、构造函数和实例对象功能与用法。分享给大家供大家参考,具体如下: 大家都知道,javascript中其实并没有类的概念。但是,用构造函数跟原型对象却可以模拟类的实现。在这里,就先...
主要介绍了JavaScript检测实例属性, 原型属性,需要的朋友可以参考下