原型链模式图解1 .2 .5
来源:互联网 发布:2018年网络dj歌曲 编辑:程序博客网 时间:2024/05/16 02:36
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title></head><body> <script> // function CreateJsPerson(name, age) { // this.name = name; // this.age = age; // } // CreateJsPerson.prototype.writeJs = function() { // console.log("my name is " + this.name + ".........."); // } // var p1 = new CreateJsPerson("a", 14); // var p2 = new CreateJsPerson("b", 24); // console.log(p1.writeJs === p2.writeJs); //true //构造函数模式中拥有了类和实例的概念,并且实例和实例之间是相互独立开的 --> 实例识别 //基于构造函数模式的原型模式解决了 方法或者属性公有的问题 --> 把实例之间相同的属性和方法提取成公有的属性和方法 --> 想让谁公有就把他放在CreateJsPerson.prototype上即可 //1.每一个函数数据类型(普通函数,类)都有一个天生自带的属性:propotype(原型),并且这个属性是一个对象数据类型的值 //2. 并且在propotype上浏览器天生给他加了一个属性constructor(构造函数),属性值是当前函数(类)本身 //3.每一个对象数据类型(普通的对象,实例,prototype)也是天生自带一个属性: __proto__,属性值是当前实例所属类的原型(prototype) function Fn() { this.x = 100; this.num = function() { console.log("私有sum"); } } Fn.prototype.getX = function() { console.log(this.x) } Fn.prototype.sum = function() { console.log("公有sum"); } var f1 = new Fn; var f2 = new Fn; console.log(Fn.prototype.constructor === Fn); //-->true console.log(f1 instanceof Object) // --> true //Object是js中所有对象数据类型的基类(最顶层的类) //1).因为f1通过__proto__可以向上级查找,不管有多少级,最后总能找到Object //2).在Object.prototype上没有__proto__属性 //原型链模式 //f1.hasOwnProperty("x"); //--> hasOwnProperty是f1的一个属性 //但是我们发现在f1的私有属性上并没有这个方法 //通过 对象名.属性名 的方式获取属性值的时候首先在对象的私有的属性上进行查找,如果私有中存在这个属性,则获取的是私有的属性值 //如果私有的没有,则通过__proto__找到所属类的原型(所属类的原型上定义的属性和方法都是当前实例的公有的属性和方法),原型上存在的话,获取的是公有的属性值 //如果原型上也没有的话,则继续通过原型上的__proto__继续向上查找,一直找到Object.prototype为止 // f1.getX === f2.getX // ---> true // f1.__proto__.getX === f2.getX // -----> true // f1.getX === Fn.prototype.getX //-----> true // f1.sum === f2.__proto__.sum //----> false // f1.sum === Fn.prototype.sum //-----> false // f1.hasOwnProperty -> f1.__proto__.proto__.hasOwnProperty //在IE浏览器中,我们的原型模式也是同样的原理,但是IE浏览器怕你通过__proto__把公有的修改,禁止使用__proto__ f1.sum = function() { //修改自己私有的sum } f1.__proto__.sum = function() { //修改所属原型上的sum } Fn.prototype.sum = function() { //修改公有的sum } </script></body></html>
阅读全文
1 0
- 原型链模式图解1 .2 .5
- 图解原型原型链
- 图解Javascript原型链
- 图解Javascript原型链
- 图解Javascript原型链
- JS原型链图解
- 原型链图解
- 图解原型链
- Javascript原型和原型链图解
- 图解js原型对象、原型链
- 图解原型链(初识篇)
- 图解原型
- 原型链及作用域知识图解
- 原型链模式
- 原型链模式扩展
- 原型链模式基础
- 原型模式-2
- 原型模式-1
- 非交互检测远程端口(非nc)
- 连续子数组的最大和
- 消息队列ActiveMQ的安装与使用
- Android通过输入暗码控制指定app icon的显示与隐藏
- 选字验证码
- 原型链模式图解1 .2 .5
- Linux常用命令学习
- C语言(getchar、_getch、gets、putchar函数的比较)
- 用java实现mybatis的动态创建表、修改表功能
- ASCII码表
- 基于SMB协议的共享文件读写
- CSS
- U_BOOT_CMD命令解析
- 【程序】Marvell 88W8686 WiFi模块(WM-G-MR-09)创建或连接热点,并使用lwip2.0.2建立http服务器