我们创建的每个函数都有一个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读书笔记1:初次学习javascript的同学比较实用的材料,想要的可以下载;
自己总结的javascript的学习笔记,希望对大家有所帮助!
该份文档于2004年整理,前段时间翻阅出来看,颇有收益,方便初学者的入门学习,也可以作为索引文件进行查阅、
JavaScript学习基础知识,对你一定有帮助!!
基础篇 Javascript学习笔记1 数据类型 Javascript学习笔记2 函数 Javascript学习笔记3 作用域 Javascript学习笔记4 Eval函数 Javascript学习笔记5 类和对象 Javascript学习笔记6 prototype的提出 Javascript学习...
JAVASCRIPT从入门到精通读书笔记.pdf
NULL 博文链接:https://shaw-n-lu.iteye.com/blog/1881210
JavaScript是一种网页编程技术,经常用于创建动态交互网页 JavaScript是一种基于对象和事件驱动的解释性脚本语言,类似C语言和Java的语法 事先不编译;逐行执行;无需进行严格的变量声明;内置大量现成对象,编写...
读书笔记
High Performance JavaScript(高性能JavaScript)读书笔记,让你的js代码更有效率。
《HTML5 CSS3 JavaScript从入门到精通微课》读书笔记模板.pptx
javascript 笔记 有助于大家去阅读,去巩固,给大家提供一定的方便。
发布读书笔记:用户可以创建新的读书笔记,包括书名、作者、阅读时间、笔记内容等信息。查看和搜索读书笔记:用户可以查看其他同学发布的读书笔记,并可以通过关键词搜索特定的笔记。评论和点赞:用户可以对其他同学...
推荐阅读:JavaScript学习笔记之数组的增、删、改、查 JavaScript学习笔记之数组求和方法 JavaScript学习笔记之数组随机排序 话说面试常会碰到面试官会问JavaScript实现数组去重的问题,最近刚好在学习有关于...
推荐阅读:JavaScript学习笔记之数组的增、删、改、查 JavaScript学习笔记之数组求和方法 JavaScript学习笔记之数组随机排序 在实际业务中有的时候要取出数组中的最大值或最小值。但在数组中并没有提供arr.max()和...
NULL 博文链接:https://wenbois2000.iteye.com/blog/898175
基于canvas(12个)、javascript(22个)、bootstrap(11个)的读书笔记(共45个demo)
合理的排版能够使内容易于阅读,提高用户对信息的理解和保留。 除了外观,网页设计还需要考虑到网站的性能和加载速度。优化图像、压缩文件、合理使用缓存等技术手段是确保网站高效运行的重要策略。这对于提高用户...