JavaScript对象原型

  • 所有JavaScript对象都从原型继承对象和方法
  • 日期对象继承自Date.prototype,数组继承自Array.prototype,对象构造器新建的对象Person继承自Person.prototype
  • Object.prototype位于原型继承连的顶端
  • 日期对象、数组对象、Person对象都继承自Object.prototype

JavaScript prototype允许在对象构造器函数外面为构造器添加新属性和新方法

<script>
//对象构造器
function Person(f,l,age,eyeColor){
this.firstName = f;
this.lastName = l;
this.age = age;
this.eyeColor = eyeColor;
//为构造器添加属性和方法,必须在构造器函数里面添加,不能在外面添加(除非使用prototype)
this.changeName = function(name){
this.lastName = name;
};
} Person.prototype.nationality = "China";
Person.prototype.changeAge = function(newAge){
this.age = newAge;
};
var zhangsan = new Person("zhangsan","lisi",13,"blue");
var liuliu = new Person("liuliu","qiqi",13,"blue");
zhangsan.changeAge(100);
// document.getElementById("demo").innerHTML = zhangsan.nationality;
document.getElementById("demo").innerHTML = zhangsan.age;
</script>

ES5特性

<script>
//ES5新的对象方法 //添加或更改对象属性
Object.defineProperty(obj, property, desc) //添加或更改多个对象属性
Object.defineProperties(obj, descriptions) //访问属性
Object.getOwnPropertyDescriptor(obj, property) //以数组形式返回所有属性
Object.getOwnPropertyNames(obj) //以数组形式返回所有可枚举的属性
Object.keys(obj) //访问原型
Object.getPrototypeOf(obj) //组织向对象添加属性
Object.preventExtensions(obj) //如果可将数学添加到对象,返回true
Object.isExtensible(obj) //防止更改对象属性
Object.seal(obj) //如果对象被密封,返回true
Object.isSealed(obj) //防止对对象进行任何更改
Object.freeze(obj) //如果对象被冻结,返回true
Object.isFrozen(obj)
</script>

ES5允许修改以下属性元数据:

writable : true      // 属性值可修改
enumerable : true // 属性可枚举
configurable : true // 属性可重新配置
writable : false // 属性值不可修改
enumerable : false // 属性不可枚举
configurable : false // 属性不可重新配置

设置为只读:

列出所有属性,返回数组:

ES5添加getter和setter

ES5添加getter、setter方法实现计数器:

25 JavaScript对象原型&ES5新的对象方法的更多相关文章

  1. js给原型增加新属性和方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. JS中定义对象原型的两种使用方法

    第一种: function Person() { this.username = new Array(); this.password = "123"; } Person.prot ...

  3. JavaScript对象原型写法区别

        体现对象原型分步式写法 //原型分步式写法 //构造函数 function Person(){} //对象原型 Person.prototype.name = 'Avensatr'; Pers ...

  4. JavaScript对象原型写法详解

        体现对象原型分步式写法 //原型分步式写法 //构造函数 function Person(){} //对象原型 Person.prototype.name = 'Avensatr'; Pers ...

  5. 深度剖析前端JavaScript中的原型(JS的对象原型)

          这张图片有点劝退了,哈哈哈~    通过原型机制,JavaScript 中的对象从其他对象继承功能特性:这种继承机制与经典的面向对象编程语言的继承机制不同.本文将探讨这些差别,解释原型链如 ...

  6. JavaScript学习12 JS中定义对象的几种方式

    JavaScript学习12 JS中定义对象的几种方式 JavaScript中没有类的概念,只有对象. 在JavaScript中定义对象可以采用以下几种方式: 1.基于已有对象扩充其属性和方法 2.工 ...

  7. JavaScript学习12 JS中定义对象的几种方式【转】

    avaScript学习12 JS中定义对象的几种方式 转自:  http://www.cnblogs.com/mengdd/p/3697255.html JavaScript中没有类的概念,只有对象. ...

  8. 原型模式(Prototype Pattern)--对象的克隆

    定义:使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象; 原型类的核心在于如何实现克隆方法: 能够实现克隆的Java类必须实现一个标识接口Cloneable,表示这个类支持被复制; 通 ...

  9. 原型模式(Prototype)(对象、克隆广告邮件)

    有些对象创建过程较为复杂,而且有些时候需要频繁的创建,原型模式通过给出一个原型对象来指明所要创建的对象的类型,然后复制这个原型对象的方法创建更多同类型的对象.这就是原型模式的动机. 原型模式的主要思想 ...

随机推荐

  1. HTML5学习(3)元素

    HTML5元素周期表 详情见:http://www.xuanfengge.com/funny/html5/element/

  2. 刷题2. Add Two Numbers

    一.题目要求 You are given two non-empty linked lists representing two non-negative integers. The digits a ...

  3. Python核心编程:8个实践性建议

    前言 我们在用Python进行机器学习建模项目的时候,每个人都会有自己的一套项目文件管理的习惯,我自己也有一套方法,是自己曾经踩过的坑踩过的雷总结出来的,现在在这里分享一下给大家,因为很多伙伴是接触P ...

  4. [MongoDB]MongoDB分页显示

    MongoDB Limit与Skip方法配合进行分页MongoDB Limit() 方法如果你需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接 ...

  5. 计算几何-多边形内核判定-HPI-poj3335

    This article is made by Jason-Cow.Welcome to reprint.But please post the article's address. 先解决一个问题, ...

  6. 能使Oracle索引失效的七大限制条件

    Oracle 索引的目标是避免全表扫描,提高查询效率,但有些时候却适得其反. 例如一张表中有上百万条数据,对某个字段加了索引,但是查询时性能并没有什么提高,这可能是 oracle 索引失效造成的.or ...

  7. kill pkill

    首先说一下kill命令,它是通过pid(进程ID)来杀死进程,要得到某个进程的pid,我们可以使用ps(process status)命令,默认情况下,kill命令发送给进程的终止信号是15,但是有些 ...

  8. python evel()的用法

    老生常谈部分: eval(expression[, globals[, locals]]) expression -- 表达式. globals -- 变量作用域,全局命名空间,如果被提供,则必须是一 ...

  9. yum源文件

    yum源文件 2017年11月22日 11:59:36 cakincqm 阅读数 1052更多 分类专栏: Linux   版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附 ...

  10. MyBatis-Spring整合之方式1

    导入相关包:Spring包:Spring架包 MyBatis包:MyBatis架包 整合包:Mybatis-Spring整合包 编写实体类User,实体类的sql映射文件,映射内容如下: <?x ...