JavaScript简单重写构造器的原型
2024-08-26 03:26:52
//简单重写原型对象: //一个构造函数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 因为这是在改变构造器原型之后的实例对象
最新文章
- Go语言实战 - revel框架教程之权限控制
- HTTP协议详解--转载http://blog.csdn.net/gueter/article/details/1524447
- SQL2000的三种“故障还原模型”
- Android平台免Root无侵入AOP框架Dexposed使用详解
- MyEclipse10.0 安装 jbpm4.4
- TCP/IP协议原理与应用笔记15:网络连接设备
- url、base64 编码规则
- ToolBox Analysis &; Design
- GridView Tab/Enter键插入新行
- JavaWeb:JSTL
- Mybatis入门1
- FTP环境搭建及客户代码调用公共方法封装
- What is “Neural Network”
- Python Django 之 静态文件存放设置
- Yeoman安装和使用详解
- centos部署yapi爬坑记
- 《Inside Solid State Device》读书笔记
- ABP框架踩坑记录
- HBase基本概念
- [Python 多线程] asyncio (十六)