JavaScript高级程序设计之原型对象
构造函数、原型对象、构造器是一体的关系,同时产生;
实例中的隐藏属性__proto__指向原型对象;
原型对象是这四种关系的纽带。
原型对象是动态的,不论在何处变化,实例中可以立即体现出来。
var Person = function(name) {
this.name = name;
}; var p1 = new Person("Nicholas"); Person.prototype.say = function() {
console.log(this.name);
}; /*
* 原型对象具有动态性
* 不论在何处添加的属性,可以立即在实例中调用
*/
p1.say(); // Nicholas /*
* 有构造函数必有原型对象
* 有原型对象,其中必有构造器属性
* 原型对象中的特殊属性构造器指向构造函数本身
*/
console.log(Person.prototype.constructor === Person); // true /*
* 实例中的原型属性指向构造函数的原型对象
* 实例中的指针仅指向原型对象,而不指向构造函数
*/
console.log(p1.__proto__ === Person.prototype); // true
重写整个原型会使其失去动态性,丢失构造器
var Person = function(name) {
this.name = name;
}; /*
* 这种写法使原型不再具有动态性
* 且丢失了Person.prototype.constructor
*/
Person.prototype = {
say: function() {
console.log(this.name);
}
}; // 实例必须在原型对象声明之后才能调用原型中的方法
var p1 = new Person("Nicholas"); p1.say(); // Nicholas console.log(Person.prototype.constructor === Person); // false console.log(p1.__proto__ === Person.prototype); // true
Douglas Object.create
// Douglas Object.create 这是基于原型的继承
if (typeof Object.create !== "function") {
Object.create = function (obj) {
var F = function () {};
F.prototype = obj;
return new F();
};
} var person = {
name: "lily",
friends: ["poly", "lucy"]
}; // 整个person对象成为了person2的原型对象
var person2 = Object.create(person); person2.name = "Lilei";
// 修改了原型对象,也既是person对象
person2.friends.push("Hanmeimei"); console.log(person.friends); // ["poly", "lucy", "Hanmeimei"]
JavaScript高级程序设计之原型对象的更多相关文章
- 读javascript高级程序设计05-面向对象之创建对象
1.工厂模式 工厂模式是一种常用的创建对象的模式,可以使用以下函数封装创建对象的细节: function CreatePerson(name,age){ var p=new Object(); p.n ...
- 读javascript高级程序设计06-面向对象之继承
原型链是实现继承的主要方法,通过原型能让一个引用类型继承另一个引用类型. 1.原型链实现继承 function SuperType(){ this.superprop=1; } SuperType.p ...
- JavaScript高级程序设计之location对象
location对象用来处理URL的相关信息 1.获取查询字符串 // 获取查询字符串对象 var getQueryStringArgs = function () { ? location.sear ...
- JavaScript高级程序设计之window对象
在浏览器中window对象实现了JavaScript中的Global对象: window对象是最顶层的对象: 所有其他全局的东西都可以通过它的属性检索到. ; window.aa = ; // 所有全 ...
- 读javascript高级程序设计00-目录
javascript高级编程读书笔记系列,也是本砖头书.感觉js是一种很好上手的语言,不过本书细细读来发现了很多之前不了解的细节,受益良多.<br/>本笔记是为了方便日后查阅,仅作学习交流 ...
- 读javascript高级程序设计-目录
javascript高级编程读书笔记系列,也是本砖头书.感觉js是一种很好上手的语言,不过本书细细读来发现了很多之前不了解的细节,受益良多.<br/>本笔记是为了方便日后查阅,仅作学习交流 ...
- 《Javascript高级程序设计》读书笔记之对象创建
<javascript高级程序设计>读过有两遍了,有些重要内容总是会忘记,写一下读书笔记备忘 创建对象 工厂模式 工厂模式优点:有了封装的概念,解决了创建多个相似对象的问题 缺点:没有解决 ...
- 阅读摘录《javascript 高级程序设计》01
前言: 因为工作需要,所以开始主攻前台JS方面的技术.在以前的工作中,使用过这门脚本语言.但是都是比较凌乱的,用到什么学什么,只是为了实现业务,而去使用. 不会考虑到代码优化,封装对象等.今次特意借了 ...
- 《JavaScript高级程序设计》学习笔记(5)——面向对象编程
欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 本节内容对应<JavaScript高级程序设计>的第六章内容. 1.面向对象(Object ...
随机推荐
- oracle 空表无法导出
1.执行该语句 select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0; ...
- mysql中explain看性能
select distinct col_name from table where a=X and b=Y and date(time)='xx-xx-xx';执行时间 27.9772 秒 expla ...
- prototype原型模式中的问题
对于每个构造函数来说,都有一个prototype属性.对于每个对象实例来说,都有_proto_属性. 参看下面代码: function Person(){} Person.prototype={ na ...
- nagios架构及windows,linux客户端配置
Linux下Nagios的安装与配置 一.Nagios简介 Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等. ...
- iOS之UIAlertView的使用
UIAlertView: 1.普通使用: //普通的alert UIAlertView *av = [[UIAlertView alloc]initWithTitle:@"title&quo ...
- Oracle笔记 十二、PL/SQL 面向对象oop编程
------------------------抽象数据类型----------- --创建地址类型,一定要加as object,还可以在类型中加过程或方法 create or replace typ ...
- Linux设备模型 学习总结
看LDD3中设备模型一章,觉得思维有些混乱.这里从整体的角度来理理思路.本文从四个方面来总结一些内容: 1.底层数据结构:kobject,kset.2.linux设备模型层次关系:bus_type,d ...
- linux 内核(驱动)常用函数
2.4.1 内存申请和释放 include/linux/kernel.h里声明了kmalloc()和kfree().用于在内核模式下申请和释放内存. void *kmalloc(unsigned ...
- gcov源码,供学习使用。
摘自http://www.opensource.apple.com/source/gcc/gcc-5484/gcc/gcov.c /* Gcov.c: prepend line execution c ...
- console数据