- 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经典实例"这个主题涵盖了一系列经过实践验证的代码片段和实用技巧,旨在帮助开发者深化对JavaScript的理解并提升技能。 描述中提到“内容丰富”,意味着这个压缩包可能包含了各种类型的JavaScript应用...
掌握如何创建对象(字面量表示法、构造函数)、访问和修改属性、原型链以及原型继承是理解JavaScript面向对象编程的关键。 4. **DOM操作**:Document Object Model(DOM)是HTML和XML文档的编程接口。实例中可能...
在"JavaScript全部实例代码"中,你将找到大量关于JavaScript语法和函数的实用示例,这些实例对于理解和掌握JavaScript至关重要。 首先,我们来看看JavaScript的基础语法。JavaScript的基本结构包括变量声明(`var`,...
JavaScript原型链是JavaScript语言中的一个核心特性,它关乎对象之间的继承关系。在JavaScript中,一切皆为对象,而原型链则是实现对象间属性和方法共享的一种机制。理解原型链对于深入学习JavaScript至关重要。 ...
这个“300个JavaScript应用实例”集合提供了一系列实用的代码片段,旨在帮助开发者深入理解和掌握JavaScript的核心概念及实际运用技巧。 1. **基础语法** JavaScript的基础包括变量、数据类型(如字符串、数字、...
7. **面向对象编程**:JavaScript支持基于原型的面向对象编程,实例可能包含构造函数、原型链、继承和封装等概念的示例。 8. **函数式编程**:JavaScript也支持函数式编程风格,如高阶函数、闭包、柯里化等。你可能...
《JavaScript编程实例五十讲》这本书无疑为初学者提供了宝贵的实践资源,同时也为有经验的程序员提供了回顾和深化理解的机会。以下将针对JavaScript的一些核心概念和常见实例进行详细阐述。 1. 变量与数据类型:...
JavaScript支持基于原型的面向对象编程,可以通过构造函数创建对象实例,并使用原型链实现继承。此外,ES6引入了类(class)语法,让JavaScript的面向对象编程更加符合传统编程习惯。 七、特效与动画 JavaScript...
这份"javascript实例代码"的压缩包很可能包含了丰富的JavaScript代码片段,涵盖了从基础操作到复杂功能的各种实例,对于学习和理解JavaScript语法、函数、对象、事件处理、DOM操作等有极大的帮助。 首先,基础知识...
7. **面向对象编程**:JavaScript也支持面向对象编程,包括构造函数、原型链、类等概念,实例会展示如何创建和使用对象。 8. **ES6及更高版本的新特性**:包括箭头函数、模板字符串、解构赋值、Promise、Async/...
《突破JavaScript编程实例五十讲》是一本专注于JavaScript实践应用的教程,旨在帮助开发者提升JavaScript编程技巧,通过五十个具体的实例来深入理解这门强大的脚本语言。这些实例涵盖了JavaScript的基础语法、面向...
7. **原型与继承**:JavaScript使用原型链实现对象的继承,理解原型和构造函数的关系,以及如何使用`prototype`属性进行继承,对于面向对象编程至关重要。 8. **异步编程**:Promise和async/await是处理异步操作的...
《突破JavaScript编程实例五十讲》是一本专注于JavaScript编程实践的学习资料,旨在帮助初学者和有一定基础的开发者深入理解和掌握这门强大的脚本语言。通过五十个精心设计的实例,本书全面覆盖了JavaScript的基础...
JavaScript中的原型模式是一种实现面向对象编程(OOP)的关键机制,它基于原型继承,使得对象可以从其他对象那里获得属性和方法。在这个模式下,每个函数都有一个`prototype`属性,这个属性是一个对象,用于共享属性...
同时,原型和原型链的概念也会被提及,它们是JavaScript实现继承和共享属性的关键机制。 函数是JavaScript中复用代码的重要手段,函数表达式、函数声明、箭头函数、闭包等都是JavaScript中独特的函数概念。此外,书...
JavaScript精彩实例教程是一本专注于实践应用的编程指南,旨在帮助初学者和有一定基础的开发者深入理解和掌握JavaScript这门强大的脚本语言。JavaScript,通常简称为JS,是网页开发中的核心语言,广泛应用于交互式...
此外,JavaScript具有原型继承机制,这是一种实现面向对象编程的方式,通过原型链来共享属性和方法。 在JavaScript中,DOM(Document Object Model)操作是常见的任务。通过JavaScript,我们可以动态地添加、删除或...
在这个“javascript常用方法实例”中,我们将会探讨一些JavaScript的核心概念和常用方法,以及它们在实际应用场景中的实例。 1. **DOM操作**:Document Object Model(DOM)是HTML和XML文档的结构化表示,...
这本书——"JavaScript应用程序经典实例全书",提供了丰富的实例源码,旨在帮助读者深入理解和应用JavaScript技术。以下是一些可能涵盖的知识点: 1. **基础语法**:JavaScript的基础包括变量声明(var、let、const...
### JavaScript原型继承工作原理及实例详解 #### 一、引言 JavaScript作为一种广泛使用的脚本语言,在Web开发中扮演着重要角色。其独特的面向对象机制是通过原型继承来实现的,这种机制使得JavaScript能够灵活地...