JavaScript简单重写构造器的原型
//简单重写原型对象: //一个构造函数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简单重写构造器的原型的更多相关文章
- 【javascript基础】4、原型与原型链
前言 荒废了好几天,在宿舍闷了几天了,一直想着回家放松,什么也没搞,论文就让老师催吧.不过,闲的没事干的感觉真是不好,还是看看书,写写博客吧,今天和大家说说函数的原型. 原型是什么 第一次看到这个的时 ...
- JavaScript简单入门(补充篇)
本文是对上一篇 JavaScript简单入门 的一些细节补充. 一.全局变量和局部变量 在<script>标签内定义的变量是当前页面中的全局变量.即 <script>标签可以直 ...
- JavaScript探秘:强大的原型和原型链
// foo 变量是上例中的 for(var i in foo) { if (foo.hasOwnProperty(i)) { console.log(i); } } JavaScript 不包括传统 ...
- 林大妈的JavaScript基础知识(三):JavaScript编程(3)原型
在一般的编程语言中,我们使用继承来复用代码,做成良好的数据结构.而在JavaScript中,我们使用原型来实现以上的需求.由于JavaScript专注于对象而摒弃了类,我们要明白原型和继承的确是有差异 ...
- Javascript中的对象和原型(3)
在Javascript中的对象和原型(二)中我们提到,用构造函数创建的对象里面,每个对象之间都是独立的,这样就会降低系统资源的利用率,解决这样问题,我们就要用到下面提到的原型对象. 一 原型对象 原型 ...
- JavaScript 变量、函数与原型链
定义 || 赋值 1-函数的定义 函数定义的两种方式: “定义式”函数:function fn(){ alert("哟,哟!"); } “赋值式”函数:var fn = funct ...
- JavaScript函数、闭包、原型、面向对象
JavaScript函数.闭包.原型.面向对象 断言 单元测试框架的核心是断言方法,通常叫assert(). 该方法通常接收一个值--需要断言的值,以及一个表示该断言目的的描述. 如果该值执行的结果为 ...
- Javascript中的对象和原型(三)(转载)
在Javascript中的对象和原型(二)中我们提到,用构造函数创建的对象里面,每个对象之间都是独立的,这样就会降低系统资源的利用率,解决这样问题,我们就要用到下面提到的原型对象. 一 原型对象 原型 ...
- Javascript中的对象和原型(一)(转载)
面向对象的语言(如Java)中有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.但是,JavaScript 没有类的概念,因此它的对象也与基于类的语言中的对象有所不同. 要了解面向对象,首 ...
随机推荐
- Python 中的继承、多态和封装
涉及问题: Python 中如何实现多继承,会有什么问题? Python 中的多态与静态方法有什么区别? 答案要点如下: Python 中的继承,就是在定义类时,在括号中声明父类,简单示例如下: cl ...
- PHP之取得当前时间函数方法
PHP之取得当前时间函数方法 PHP之取得当前时间函数方法文章提供了php的几种获取当前时间的函数,date,time等,同时告诉我如何解决时区问题.php教程取得当前时间函数文章提供了php的几种获 ...
- 基于JavaMail向邮箱发送邮件
参考:http://blog.csdn.net/ghsau/article/details/17839983 http://blog.csdn.net/never_cxb/article/detail ...
- EntityFramework Core 运行dotnet ef命令迁移背后本质是什么?(EF Core迁移原理)
前言 终于踏出第一步探索EF Core原理和本质,过程虽然比较漫长且枯燥乏味还得反复论证,其中滋味自知,EF Core的强大想必不用我再过多废话,有时候我们是否思考过背后到底做了些什么,到底怎么实现的 ...
- 排序算法Java实现(快速排序)
算法描述:对于一组给定的记录,通过一趟排序后,将原序列分为两部分,其中前一部分的所有记录均比后一部分的所有记录小,然后再依次对前后两部分的记录进行快速排序,递归该过程,直到序列中的所有记录均有序为止. ...
- 【Python】 汉字转化汉语拼音pinyin
pinyin pinyin模块是github上一个小项目,在github.com/cleverdeng/pinyin.py上面可以下到源码.衷心感谢那些为这个模块做出贡献的人来方便我们[鞠躬] 安装: ...
- windows上SSH服务连接远程主机失败
putty连接出现错误提示"Network error:connection refused",xshell连接出现错误提示"connection failed:(por ...
- jmeter常见问题汇总
Aggregate Report 是 JMeter 常用的一个 Listener,中文被翻译为"聚合报告".今天再次有同行问到这个报告中的各项数据表示什么意思,顺便在这里公布一下, ...
- 设计模式之 原型模式详解(clone方法源码的简单剖析)
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 原型模式算是JAVA中最简单 ...
- C#,一份超简单的数据库帮助类,SqlHelp
简单,实用,留存. using System; using System.Collections.Generic; using System.Configuration; using System.D ...