学习笔记之重写原型
来源:互联网 发布:php cookies管理系统 编辑:程序博客网 时间:2024/06/07 02:12
重写原型相对的比较简单
function Person(){}Person.prototype = {name : "zhangsan",age : 22,sayHi : function(){alert("hi");}}
当重写原型后,实例的构造器将不在指向原型,而是Object,虽然用instanceof判断没有问题,实例依旧是Person,但constructor则等于Object不等于Person了
var person = new Person();console.log(person instanceof Object); //trueconsole.log(person instanceof Person); //trueconsole.log(person.constructor == Object); //trueconsole.log(person.constructor == Person); //false
ECMAScript 5 后的javaScript可以通过defineProperty来将constructor设置回Person
Object.defineProperty(Person.prototype,"constructor",{enumerable : false,value : Person});在来测试一下
console.log(person instanceof Object);//trueconsole.log(person instanceof Person);//trueconsole.log(person.constructor == Object);//falseconsole.log(person.constructor == Person);//true
原型的动态性
在原型中查找值是一次搜索,因此对原型对象的任何修改都可以立即从实例上反映出,比如:
function Person(){}var person1 = new Person();Person.prototype.name = "zhangsan";Person.prototype.age = 22;Person.prototype.sayHi = function(){alert("hi");}person1.sayHi(); //hi上面即使实例的声明在原型之前,依据可以访问sayHi属性,实例与原型是松耦合的关系,但调用sayHi属性时,先会在实例中查询,查询不到会去原型中查询名为sayHi的属性。但如果重写了原型,就不行了,重写了原型,实例必须声明在重写之后才能访问原型属性,否则将抛出异常。
Person.prototype = {name : "zhangsan",age : 22,sayHi : function(){alert("hi");}}person1.sayHi(); //errorvar person2 = new Person();person2.sayHi(); //hi
上面person1抛出了sayHi is not a function而之后声明的实例person2调用sayHi则是正常的弹出一个提示框
0 0
- 学习笔记之重写原型
- 设计模式学习笔记之原型模式
- 设计模式学习笔记之原型模式
- 学习笔记之原型模式 prototype
- 学习笔记之hashcode(),equals()重写
- JS原型模式之修改与重写
- JS原型学习笔记
- 原型学习笔记
- JS原型学习笔记
- JavaScript原型学习笔记
- C++学习序列笔记之函数原型和函数定义
- javascript之对象学习笔记(二)--对象原型,继承
- JavaScript学习笔记之四 对象 及原型
- Java学习笔记之重写(Overriding)与重载(Overloading)
- 学习笔记之https配置方法(页面重写)
- java学习之重写
- 第三阶段-原型学习笔记
- javaSE学习笔记6 重写
- 排序算法之堆排序
- 自定义组合控件
- 微信中长按弹出菜单(2)实现了功能
- 在Java程序中打log
- ajax
- 学习笔记之重写原型
- 冒泡排序(Bubble_Sort)
- yii2 strace 追踪正在执行的进程
- 二十三种设计模式
- 安卓Android多阶段进度条progress bar附带动画效果
- Codevs_P3037 线段覆盖 5(DP+二分)
- static
- 发现一个不错的网站,记下来http://blog.coderzh.com/
- 博客开篇