体现对象原型分步式写法

//原型分步式写法
//构造函数
function Person(){}
//对象原型
Person.prototype.name = 'Avensatr';
Person.prototype.age = '22';
Person.prototype.job = 'Software Engineer';
Person.prototype.sayName = function(){
console.log(this.name);
}

我问你答?? 打印结果是??

var person = new Person();
//__proto__隐式原型与显式原型Person.prototype
console.log(person.__proto__);
console.log(Person.prototype);
//构造函数(对象原型构造用于构造对象)
console.log(Person.prototype.constructor);
console.log(Person.prototype.constructor === Person);
//构造函数原型
console.log(Person.prototype.constructor.prototype);
//对象原型
console.log(Person.prototype.__proto__);
//构造函数是由function Function(){}创建
console.log(Person.prototype.constructor.__proto__);
console.log(person.__proto__ === Person.prototype);

理清上述(实例与构造原型对象关联关系)打印结果后,见图解如下

完整图解应如下

Person.prototype只是对象指针引用,真正创建对象的是Person.prototype.constructor.prototype 构造函数原型

每个创建一个函数都有prototype属性,该函数prototype属性指向一个该函数创建的对象.即 Person.prototype.constructor.prototype

实例对象之间通过“__proto_隐式原型”与构造函数原型对象“Person.prototype”之间相关联 即person.__proto__ === Person.prototype

instanceof 用于检测对象与实例之间关系

person instanceof  Person 沿着原型链person.__proto__与Person.prototype查找,若两条线能找到同一个引用,即同一个对象,则返回true,否则返回false

    体现对象原型封装的写法

//原型集中写法
function Person(){}
var friends = new Person();//创建一个实例对象
Person.prototype = {
name : "Avensatr",
age : "22",
job : "Software Engineer",
sayName : function(){
console.log(this.name);
}
}

这种面向对象快捷写法 Person.prototype = {} 与上述对象原型分步式写法有所区别;本质体现在原型的重写上

Person.prototype.constrctor 不再指向 function Person(){} 而指向新的function Object() { [native code] }函数

打印结果如下图

   匿名函数自执行封装对象原型方法

function Person(){}
Person.prototype = (function () {
var setName = function (name) {
return name;
},
setAge = function (age) {
return age;
},
setJob = function (job) {
return job;
};
return {
setName : setName,
setAge : setAge,
setJob : setJob
}
})();

匿名函数自执行与体现对象原型封装的写法原理是一样的,这里不再赘述  

作者:Avenstar

出处:http://www.cnblogs.com/zjf-1992/p/6622444.html

关于作者:专注于前端开发

本文版权归作者所有,转载请标明原文链接

【资料参考】

http://www.sxrczx.com/docs/js/2305453.html

JavaScript高级程序设计(第三版)

最新文章

  1. 《Just for Fun》读后感
  2. python学习:环境搭建
  3. equals()的用法
  4. 由node-webkit想到
  5. Single Number III
  6. poj 3468 A Simple Problem with Integers 线段树第一次 + 讲解
  7. 批量kill进程
  8. display_errors & error_reporting(php调试安全)
  9. android软键盘的用法总结
  10. 走FILTER效率高的2种情况
  11. MVC 5 - 查询Details和Delete方法
  12. POI--帮助文档
  13. 前端(各种demo)二:左侧导航栏的折叠和打开(不使用js)基础版和升级版
  14. CAS部署在Windows上
  15. NoSQL与MongoDB介绍
  16. zabbix添加对centos系统内存使用率百分比的监控
  17. splunk + docker-compose 实现自定义 index
  18. Rule Compilation error xxx cannot be resolved
  19. ACM-ICPC 2018北京网络赛-A题 Saving Tang Monk II-优先队列
  20. centos yum命令找不到包

热门文章

  1. Mock以及Mockito的使用
  2. phpcms 列表项 内容项
  3. [Mysql] "Too many connections"
  4. POJ 3356 AGTC(DP求字符串编辑距离)
  5. 杭电2000——ASCII码排序
  6. Vue2.0源码阅读笔记--双向绑定实现原理
  7. TCP和UDP的"保护消息边界”
  8. Professional C# 6 and .NET Core 1.0 - Chapter 41 ASP.NET MVC
  9. 每天一个linux命令(34)--top命令
  10. Hibernate执行流程和关系映射