//简单重写原型对象:

 //一个构造函数Person
function Person(){ }
//重写Person的原型
//把Person的原型赋值给一个新的对象 是我们重写的过程
Person.prototype={
// 对于构造器 如果我们不给他写,则构造器就是Object的构造器了
constructor:Person, //加上构造器属性 这里有一点问题 因为构造器属性是不可枚举的,这里无法设置
name:"张三",
sayName:function(){
alert(this.name);
}
}; var p1 = new Person();
alert(Person.prototype.constructor); /*
以上我们认为模拟重写了一个构造函数的原型
但是有很多问题。构造器是不可枚举的,在这里我们无法实现不可枚举属性。 在js中提供Object.defineProperty(对象,属性,配置) 来实现设置属性的一些性质
重写一个原型就可以这样实现:
* */
Object.defineProperty(
Person.prototype , //要配置的对象
"constructor", //配置对象的构造器 构造器
{ //构造器的特性
enumerable :false, //构造器 不可枚举
value : Person //构造器的值是Person
}
);
// 通过以上方式重写 就把构造器设置成不可枚举了
var p2 = new Person();
for(attr in p2){
alert(attr);
} /*
注意:由于语言的动态性 在实例化对象之后 如果给原型添加属性或方法,实际上实例对象是能调用后添加的属性和方法
实例化之后 重写原型,实际上实例的原型还是指向原来的原型对象 不是新的原型对象
*/
function Person(){ }
var p1 = new Person();
Person.prototype.name="哈哈";
alert(p1.name); //哈哈 因为p1的原型引用调用之前已经添加属性 可以使用 var p2 = new Person();
Person.prototype = {
constructor : Person,
name:"xixi"
};
alert(p2.name); //哈哈,实例对象之后改变构造器的原型,实例的对象的原型还指向原来的 var p3 = new Person();
alert(p3.name); //xixi 因为这是在改变构造器原型之后的实例对象

最新文章

  1. Go语言实战 - revel框架教程之权限控制
  2. HTTP协议详解--转载http://blog.csdn.net/gueter/article/details/1524447
  3. SQL2000的三种“故障还原模型”
  4. Android平台免Root无侵入AOP框架Dexposed使用详解
  5. MyEclipse10.0 安装 jbpm4.4
  6. TCP/IP协议原理与应用笔记15:网络连接设备
  7. url、base64 编码规则
  8. ToolBox Analysis & Design
  9. GridView Tab/Enter键插入新行
  10. JavaWeb:JSTL
  11. Mybatis入门1
  12. FTP环境搭建及客户代码调用公共方法封装
  13. What is “Neural Network”
  14. Python Django 之 静态文件存放设置
  15. Yeoman安装和使用详解
  16. centos部署yapi爬坑记
  17. 《Inside Solid State Device》读书笔记
  18. ABP框架踩坑记录
  19. HBase基本概念
  20. [Python 多线程] asyncio (十六)

热门文章

  1. 进入TP-Link路由器之后利用快捷键F12查看星号路由密码的方法
  2. install-scp
  3. Swift 笔记汇总
  4. 笔记:MyBatis 使用 Java API配置
  5. 获取DOM节点的几种方式
  6. WPF 16进制byte输入框
  7. 【Django】 初步学习
  8. 【Linux】 CentOS6.5安装Python2.7以及pip等工具
  9. linux --> 动态库和静态库
  10. 说一说Java的Unsafe类