我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个对象,他的用途是包含可以由特定类型的所有实例共享的属性和方法。
function Person() {
};
Person.prototype.name = "Miles";
Person.prototype.age = 24;
Person.prototype.job = "Engineer";
Person.prototype.sayName = function() {
alert(this.name);
};
var person1 = new Person();
person1.sayName(); // "Miles"
var person2 = new Person();
person2.sayName(); // "Miles"
alert(person1.sayName() == person2.sayName()); // true
这些方法和属性直接添加到了Person的prototype属性中,构造函数变成了空函数。
新对象的这些属性和方法是由所有实例共享的。
只要创建了一个新函数,就会根据一组特定的规则为该函数创建一个prototype。在默认情况下,所有prototype属性都会自动获得一个constructor属性,这个属性包含一个指向prototype属性在所函数的指针。
创建了自定义的构造函数之后,其原型属性默认只会取得constructor属性,其他方法都是从Object继承而来。
在所有实例中都可以通过isPrototypeOf()方法来确定对象之间是否存在关系。
alert(Person.prototype.isPrototypeOf(person1)); // true
每当代码读取某个对象的某个属性时,都会去搜索给定名字的属性。先从实例中开始,找到返回,如果没有再从原型中搜索,找到返回。
function Person() {
};
Person.prototype.name = "Miles";
Person.prototype.age = 24;
Person.prototype.job = "Engineer";
Person.prototype.sayName = function() {
alert(this.name);
};
var person1 = new Person();
var person2 = new Person();
person1.name = "Jenny";
person1.sayName(); // "Jenny" ---来自实例
person2.sayName(); // "Miles" ---来自原型
delete person1.name;
person1.sayName(); // "Miles" ---来自原型
上面代码可以看出,当为对象实例添加一个属性时,这个属性会屏蔽原型对象中保持的同名属性,但是不会修改那个属性。
简单的原型语法
function Person() {
}
Person.prototype = {
name : "Miles",
age : 29,
job : "Engineer",
sayName : function() {
alert(this.name);
}
};
这种方法本质上重写了prototype对象,因此constructor属性也就变成了对象的constructor属性(指向Object构造函数),不在指向Person函数。
我们对原型对象所做的任何修改都能够立即从实例上反映出来--即使是先创建了实例后修改原型也照样如此。但是如果是重写整个原型对象就不行了。
function Person() {
}
var person = new Person();
Person.prototype = {
constructor : Person,
name : "Miles",
age : 29,
job : "Engineer",
sayName : function() {
alert(this.name);
}
};
person.sayName(); // error
与个人博客YYer
同步更新
分享到:
相关推荐
JavaScript是Web开发中不可或缺的一部分,它是一种轻量级的解释型编程语言,广泛用于网页和网络应用。在学习JavaScript时,了解其基本概念至关重要。以下是一些关键知识点的详细说明: 1. 变量: 在JavaScript中,...
这篇读书笔记主要聚焦在第三部分,这部分通常涵盖了更高级的主题,如对象、原型、闭包以及模块化等。结合提供的"listutil.js"文件,我们可以深入探讨JavaScript中的实用工具函数和编程技巧。 首先,JavaScript的...
该份文档于2004年整理,前段时间翻阅出来看,颇有收益,方便初学者的入门学习,也可以作为索引文件进行查阅、
JavaScript学习笔记主要涵盖...通过阅读和理解这篇"JavaScript学习笔记",你可以逐步提升JavaScript技能,从而更好地开发网页和应用程序。记得实践是检验真理的唯一标准,多写代码,多解决问题,才能真正掌握这门语言。
通过阅读笔记和深入学习jQuery CHM,初学者可以在短时间内提升自己的前端开发技能。 此外,实践是检验学习效果的最好方式。初学者应该尝试自己动手编写简单的JavaScript程序和使用jQuery实现动态效果,这样不仅可以...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,广泛用于数据传输。 #### jQuery jQuery是一个快速、简洁的JavaScript库,简化了HTML文档遍历、...
### JavaScript DOM 编程艺术读书笔记关键知识点解析 #### 一、JavaScript简史与相关技术简介 - **XHTML(可扩展的超文本标记语言)**:这是一种更加严格、更加强大的HTML版本,旨在提高网页的可读性和可扩展性。 ...
注释不会被浏览器执行,但可以被开发者阅读。 JavaScript可以通过不同的方式引入到HTML页面中,主要有三种方法:行内引入、外部引入和内部引入。行内引入是通过在HTML标签中直接写入JavaScript代码实现,如`('我要...
课程中的源码分析部分,可能是对一些经典库或框架的源码解读,如jQuery、lodash等,通过阅读源码,可以深入理解JavaScript的高级技巧和优化手段,提升代码质量。 八、笔记总结 笔记部分是对整个学习过程的记录和...
基础篇 Javascript学习笔记1 数据类型 Javascript学习笔记2 函数 Javascript学习笔记3 作用域 Javascript学习笔记4 Eval函数 Javascript学习笔记5 类和对象 Javascript学习笔记6 prototype的提出 Javascript学习...
5. **JavaScript框架与库**:笔记可能提及了流行的JavaScript库如jQuery,以及框架如React、Vue.js、Angular,介绍它们的基本用法和设计理念。 6. **ES6新特性**:ECMAScript 6(简称ES6)引入了许多新特性和语法糖...
JAVASCRIPT从入门到精通读书笔记.pdf
《蓝杰JavaScript学习笔记》是一份综合性的JavaScript学习资料,主要涵盖了JavaScript在网页动态操作、DOM操作以及事件处理等方面的基础知识。这篇笔记通过多个实例文件,如`dynamicCreateTable.htm`、`...
本学习笔记专为初学者设计,旨在帮助新接触JavaScript的人快速掌握这门语言的核心概念和实用技巧。 首先,"JavaScript特效.chm"可能是一份关于JavaScript实现的各种网页特效的教程。这些特效可能包括图片轮播、下拉...
JavaScript权威指南笔记是深入理解和掌握JavaScript这门编程语言的重要参考资料。这份笔记包含了作者在研读《JavaScript权威指南...通过阅读和理解这些笔记,你可以提升自己的JavaScript技能,更好地应对各种开发场景。
通过阅读这些笔记,学习者不仅可以掌握前端开发的基本技能,还能了解到实际开发中可能会遇到的问题和解决策略。 文件列表中的"CSS1"和"CSS2"可能包含了一些CSS的实例或练习,"html"文件夹可能包含了HTML页面示例,...
JavaScript是一门在Web开发中不可或缺的编程语言,它被用于创建交互式的网页内容和增强用户体验。虽然它广受欢迎,但同样伴随着许多争议和挑战。在《JavaScript 精粹》一书中,作者深入探讨了JavaScript的特性和最佳...