javascript一种新的对象创建方式-Object.create()
1.Object.create() 是什么?
Object.create(proto [, propertiesObject ]) 是E5中提出的一种新的对象创建方式,第一个参数是要继承的原型,如果不是一个子函数,可以传一个null,第二个参数是对象的属性描述符,这个参数是可选的。
例如:
function Car (desc) {this.desc = desc;this.color = "red"; }Car.prototype = {getInfo: function() {return 'A ' + this.color + ' ' + this.desc + '.';} }; //instantiate object using the constructor function var car = Object.create(Car.prototype); car.color = "blue"; alert(car.getInfo());
结果为:A blue undefined.
2.propertiesObject 参数的详细解释:(默认都为false)
数据属性
- writable:是否可任意写
- configurable:是否能够删除,是否能够被修改
- enumerable:是否能用 for in 枚举
- value:值
访问属性:
- get(): 访问
- set(): 设置
3.例子:直接看例子就知道怎么用。
<!DOCTYPE html> <html> <head><title>yupeng's document </title><meta charset="utf-8"/> </head> <body><script type="text/javascript">var obj = {a:function(){console.log(100)},b:function(){console.log(200)},c:function(){console.log(300)}}var newObj = {};newObj = Object.create(obj,{t1:{value:'yupeng',writable:true},bar: {configurable: false,get: function() { return bar; },set: function(value) { bar=value }}})console.log(newObj.a());console.log(newObj.t1);newObj.t1='yupeng1'console.log(newObj.t1);newObj.bar=201;console.log(newObj.bar)function Parent() { }var parent = new Parent();var child = Object.create(parent, {dataDescriptor: {value: "This property uses this string as its value.",writable: true,enumerable: true},accessorDescriptor: {get: function () { return "I am returning: " + accessorDescriptor; },set: function (val) { accessorDescriptor = val; },configurable: true}});child.accessorDescriptor = 'YUPENG';console.log(child.accessorDescriptor);var Car2 = function(){this.name = 'aaaaaa'} //this is an empty object, like {}Car2.prototype = {getInfo: function() {return 'A ' + this.color + ' ' + this.desc + '.';}};var newCar = new Car2();var car2 = Object.create(newCar, {//value propertiescolor: { writable: true, configurable:true, value: 'red' },//concrete desc valuerawDesc: { writable: true, configurable:true, value: 'Porsche boxter' },// data properties (assigned using getters and setters)desc: { configurable:true, get: function () { return this.rawDesc.toUpperCase(); },set: function (value) { this.rawDesc = value.toLowerCase(); } }}); car2.color = 'blue';console.log(car2.getInfo());car2.desc = "XXXXXXXX";console.log(car2.getInfo());console.log(car2.name);</script> </body> </html>
结果为:
转载于:https://www.cnblogs.com/m2maomao/p/7754100.html
javascript一种新的对象创建方式-Object.create()相关推荐
- JavaScript新的对象创建方式---Object.create()
Object.create(proto [, propertiesObject ]) 是E5中提出的一种新的对象创建方式, 第一个参数是要继承的原型,如果不是一个子函数,可以传一个null, 第二个参 ...
- 第163天:js面向对象-对象创建方式总结
面向对象-对象创建方式总结 1. 创建对象的方式,json方式 推荐使用的场合: 作为函数的参数,临时只用一次的场景.比如设置函数原型对象. 1 var obj = {}; 2 //对象有自己的 属性 ...
- Spring学习(二)—— 对象创建方式及依赖注入
文章目录 对象创建方式 配置 依赖注入 构造器注入 Set方式注入 拓展方式注入 对象创建方式 默认使用无参构造器创建 当我们需要使用有参构造器时,有以下几种方式: 1.下标赋值 <!--第一种 ...
- 尝试一种新的带人方式
尝试一种新的带人方式 最早带人时,没有什么经验,我总是觉得他们做事太慢.慢得让我受不了时,干脆帮他们把代码和文档都写了.一般情况下,也勉强能赶上进度.但这占去了我大部分业余时间,搞我很累,他们似乎也不 ...
- spring配置详解-三种对象创建方式_
新建一个包,b_create,关于Spring创建对象的方式,咱们首先先介绍默认方式,我复制一个配置文件过来,在这个包下创建一个配置文件,把这些注释可以删掉了,现在咱们看到的情况,是常见的情况,这种情 ...
- Spring三种对象创建方式
1.创建方式1:无参构造 我们先创建一个User类: public class User {private String name;private int age;public User() {Sys ...
- JavaScript七种非常经典的创建对象方式
JavaScript创建对象的方式有很多,通过Object构造函数或对象字面量的方式也可以创建单个对象,显然这两种方式会产生大量的重复代码,并不适合量产.接下来介绍七种非常经典的创建对象的方式,他们也 ...
- 一篇文章认识4种Java多线程的创建方式
Java4种多线程的创建: 什么是程序? 什么是进程? 什么是线程? 并行与并发: 那么JAVA多线程实现方式: (1)继承Thread类实现多线程: (2)实现Runnable接口方式实现多线程: ...
- C++ 对象创建方式
原址 C++在创建对象的时候可以采用两种方式:(例如类名为Test) Test test 或者 Test* pTest = new Test(). 这两种方法都可以实例化一个对象,但是这两种方法有很 ...
最新文章
- ZOJ 2723 Semi-Prime ||ZOJ 2060 Fibonacci Again 水水水!
- git 换行问题_后端必备的 Git 分支开发规范指南
- STM32F103的USART1和USART2的TX和RX所对应的分别是那个引脚?
- linux做成service服务器,Zabbix2.0.3做成Service
- 中国石化行业节能减排行业发展动态与运营前景规划展望报告2022年
- HDU3333 Turing Tree 离线树状数组
- webservice传送XML大小估算
- 【leetcode】Max Points on a Line(hard)☆
- 敲一下enter键,完成iOS的打包工作
- 密集预测任务的多任务学习(Multi-Task Learning)研究综述 - 网络结构篇(上)
- 常见搜索算法(二):二分查找
- SPI与IIC的异同
- 目前绝大多数处理语言先验性文章总结
- 深度学习目标检测模型综述
- 云服务器上的项目无法连接数据库,云服务器中项目连接数据库
- 超详细的AD8031ARZ介绍,就在这里
- 电子油门踏板/刹车踏板位置传感器
- 【无标题】类模板详解\n类模板的定义及实例化\ntemplate\u003Cclass 模板参数>\nclass 类名 {\n // 类定义\n};\n\ntemplate\u003Ctypen
- rtthread工业使用_基于RTThread 的LwIP使用讲解
- 英特尔旗下Mobileye纳斯达克上市:上涨38% 市值231亿美元
热门文章
- Java多线程案例——单例模式(恶汉模式和懒汉模式)
- OpenMP中的Reduction操作 #pragma omp xxx reduction()
- 用Python做个美少女大战小怪兽
- 在梦中写代码的程序员,比例居然这么高
- htc系统Android 7.1,这款HTC太强大,被誉为刷机之王,一路升到安卓7.1
- 【示波器专题】示波器探头不同的衰减比对测量的影响
- 视频mp4与m4v格式区别
- Possibly consider using a shorter maxLifetime value.解决方法
- 中俄边界上的田园综合体:被额尔古纳河环抱着的“世外桃源”
- bootstrap实战--微金所项目(导航栏)