//简单重写原型对象:

 //一个构造函数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 因为这是在改变构造器原型之后的实例对象

JavaScript简单重写构造器的原型的更多相关文章

  1. 【javascript基础】4、原型与原型链

    前言 荒废了好几天,在宿舍闷了几天了,一直想着回家放松,什么也没搞,论文就让老师催吧.不过,闲的没事干的感觉真是不好,还是看看书,写写博客吧,今天和大家说说函数的原型. 原型是什么 第一次看到这个的时 ...

  2. JavaScript简单入门(补充篇)

    本文是对上一篇 JavaScript简单入门 的一些细节补充. 一.全局变量和局部变量 在<script>标签内定义的变量是当前页面中的全局变量.即 <script>标签可以直 ...

  3. JavaScript探秘:强大的原型和原型链

    // foo 变量是上例中的 for(var i in foo) { if (foo.hasOwnProperty(i)) { console.log(i); } } JavaScript 不包括传统 ...

  4. 林大妈的JavaScript基础知识(三):JavaScript编程(3)原型

    在一般的编程语言中,我们使用继承来复用代码,做成良好的数据结构.而在JavaScript中,我们使用原型来实现以上的需求.由于JavaScript专注于对象而摒弃了类,我们要明白原型和继承的确是有差异 ...

  5. Javascript中的对象和原型(3)

    在Javascript中的对象和原型(二)中我们提到,用构造函数创建的对象里面,每个对象之间都是独立的,这样就会降低系统资源的利用率,解决这样问题,我们就要用到下面提到的原型对象. 一 原型对象 原型 ...

  6. JavaScript 变量、函数与原型链

    定义 || 赋值 1-函数的定义 函数定义的两种方式: “定义式”函数:function fn(){ alert("哟,哟!"); } “赋值式”函数:var fn = funct ...

  7. JavaScript函数、闭包、原型、面向对象

    JavaScript函数.闭包.原型.面向对象 断言 单元测试框架的核心是断言方法,通常叫assert(). 该方法通常接收一个值--需要断言的值,以及一个表示该断言目的的描述. 如果该值执行的结果为 ...

  8. Javascript中的对象和原型(三)(转载)

    在Javascript中的对象和原型(二)中我们提到,用构造函数创建的对象里面,每个对象之间都是独立的,这样就会降低系统资源的利用率,解决这样问题,我们就要用到下面提到的原型对象. 一 原型对象 原型 ...

  9. Javascript中的对象和原型(一)(转载)

    面向对象的语言(如Java)中有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.但是,JavaScript 没有类的概念,因此它的对象也与基于类的语言中的对象有所不同. 要了解面向对象,首 ...

随机推荐

  1. bootstrap 栅格系统 自动隐藏

    1 Container 顾名思义Container是栅格系统最外层的class,直接被container包裹的只能是row这个class.需要注意的是container自带左右各15px paddin ...

  2. redis基本类型和使用

    redis存储数据的基本类型有:string(字符串类型).hash(散列类型).list(列表类型).set(集合类型).zset(有序集合类型). 依次做一些练习.redis命令不区分大小写. k ...

  3. Java注解学习笔记

    我们平常写Java代码,对其中的注解并不是很陌生,比如说写继承关系的时候经常用到@Override来修饰方法.但是@Override是用来做什么的,为什么写继承方法的时候要加上它,不加行不行.如果对J ...

  4. 通过漫画轻松掌握HDFS工作原理

  5. JQuery代码实现上拉加载(不使用插件)

    <script type="text/javascript"> $(window).scroll(function() { //已经滚动到上面的页面高度 var sl_ ...

  6. echarts词云引用

    最近项目中需要使用echarts的词云图,因为几经波折才引用成功,所以想记下来跟大家分享,(我的随笔不会写那么多让人需要动脑子去理解的东西,就是记录一下步骤,因为经验甚少,底层原理懂得不多,所以就先记 ...

  7. Android Intent 基本使用及对象构成

    Intent基本使用 Intent可以理解为不同组件通信的媒介或者信使. Intent可以启动一个Activity,也可以启动一个Service,还可以发起一个广播Broadcast. 具体方法如下表 ...

  8. echarts图表变形解决方案

    在同一页面的多个echarts图在查询或切换图片时可能会变形,如图 解决方案是添加以下几行代码 /*在查询或切换统计图时图片有可能会变形,于是每次调getEchartsData()都给每个chart的 ...

  9. 开源小工具 酷狗、网易音乐缓存文件转mp3工具

    发布一个开源小工具,支持将酷狗和网易云音乐的缓存文件转码为MP3文件. 以前写过kgtemp文件转mp3工具,正好当前又有网易云音乐缓存文件需求,因此就在原来小工具的基础上做了一点修改,增加了对网易云 ...

  10. Active MQ 实战(一)

    1.什么是JMS JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送 ...