javascript的创建对象object.create()和属性检测hasOwnPrototype()和propertyIsEnumerable()
Object.create("参数1[,参数2]")是E5中提出的一种新的对象的创建方式.
第一个参数是要继承到新对象原型上的对象;
第二个参数是对象属性.这个参数可选,默认为false
第二个参数的具体内容:
writable:是否可任意写, true可以,false不可以
configuration:是否能够删除,是否能够被修改.
enumerable:是否能用for in枚举
value:属性值
get()读
set()写
Object.create=function(obj){
var F=function(){};
F.prototype=obj;
return new F();
};
//再来一段代码演示参数的使用.
function Parent(){}
var p=new Parent();
var newObj=Object.create(p,{
name:{
value:"思思博士",//name值
writable:true,//可写
enumerable:false//不可枚举
},
age:{
get:function(){return "我今年"+age+"岁";},//读取age
set:function(val){age=val;},//设置age
configuration:false//能否删除
}
});
console.log("newobj的属性name:"+newObj.hasOwnProperty("name"));//false
console.log("parent的属性name:"+p.hasOwnProperty("name"));//false
上面一段代码是创建一个newObj对象,这个对象的原型是继承自parent
又有false可以推断出name是来自于原型中,并且不是来自于p这个对象.
hasOwnProperty().方法用来检测给定的名字是否是对象的只有属性.对于继承属性它将返回false
var o={x:1};
console.log(o.hasOwnProperty("x"));//true.
console.log(o.hasOwnProperty("y"));//false
console.log(o.hasOwnProperty("toString"));//false
propertyIsEnumerable()是hasOwnProperty()的增强版,只有检测到是只有属性且这个属性的可枚举为true是它才返回true.
var obj=Object.create(o);
obj.xx=1;
console.log(obj.propertyIsEnumerable("x"));//false
console.log(obj.propertyIsEnumerable("xx"));//true
console.log(Object.prototype.propertyIsEnumerable("toString"));//false
javascript的创建对象object.create()和属性检测hasOwnPrototype()和propertyIsEnumerable()的更多相关文章
- JavaScript中四种不同的属性检测方式比较
JavaScript中四种不同的属性检测方式比较 1. 用in方法 var o = {x:1}; "x" in o; //true "y" in o; //fa ...
- Object.create() __https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/create
Object.create() 方法会使用指定的原型对象及其属性去创建一个新的对象. 语法 Object.create(proto[, propertiesObject]) 参数 proto 新创建对 ...
- js创建对象 object.create()用法
Object.create()方法是ECMAScript 5中新增的方法,这个方法用于创建一个新对象.被创建的对象继承另一个对象的原型,在创建新对象时可以指定一些属性. 语法: Object.crea ...
- [Javascript] Prototype 2 Object.create()
function Fencepost (x, y, postNum){ this.x = x; this.y = y; this.postNum = postNum; this.connections ...
- firefox-Developer开发者站点——关于Object.create()新方法的介绍
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/create Objec ...
- js Object.create 初探
1.作用 Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__. https://developer.mozilla.org/zh-CN/docs/W ...
- 前端开发者进阶之ECMAScript新特性【一】--Object.create
Object.create(prototype, descriptors) :创建一个具有指定原型且可选择性地包含指定属性的对象 参数:prototype 必需. 要用作原型的对象. 可以为 nul ...
- Object.create() 的含义:从一个实例对象,生成另一个实例对象
出处:https://wangdoc.com/javascript/oop/object.html#objectcreate 生成实例对象的常用方法是,使用new命令让构造函数返回一个实例.但是很多时 ...
- ECMAScript新特性【一】--Object.create
Object.create(prototype, descriptors) :创建一个具有指定原型且可选择性地包含指定属性的对象 参数: prototype 必需. 要用作原型的对象. 可以为 nu ...
随机推荐
- Solidity 官方文档中文版 1_简介
简介 Solidity是一种语法类似JavaScript的高级语言.它被设计成以编译的方式生成以太坊虚拟机代码.在后续内容中你将会发现,使用它很容易创建用于投票.众筹.封闭拍卖.多重签名钱包等等的合约 ...
- ongene database
http://ongene.bioinfo-minzhao.org/index.html
- phpstorm 2017版代码提示功能开启解决方案
安装好phpstorm 2017之后 发现代码高亮和函数自动提示都失效了 在phpstorm底部面板的信息提示处发现有一条系统消息: 12:04:18 Power save mode is on Co ...
- 给 C# Expression Evaluator 增加中文变量名支持
由于一些特殊的原因,我的Expression里面需要支持中文变量名,但是C# Expression Evaluator会提示错误,在他的HelperMethods.IsAlpha()里面加上这么一段就 ...
- less 全局变量使用
less 全局变量使用 忽然想定义一个变量,但是却需要每个 .vue 文件都需要单独引入这个全局变量才可以,导致很多重复不必要的工作,因而得寻找一种可以任何地方都可以访问的方法 借助换肤这个功能 sa ...
- 前端 crypto-js aes 加解密
下载:npm install crypto-js --save 需要定义两个方法 ,分别是用于加密和解密,这里我将它放在了 utils 文件夹下,命名为 secret.js ,其具体代码如下: con ...
- GVIM设置背景颜色
首先找到GVim的安装目录,在安装目录下你可以发现一个_vimrc文件,使用文本编辑器打开后在里面添加两行代码即可:代码如下set gfn=Courier_New:h14colorscheme tor ...
- Eclipse中配置Solr源码
转自 http://hongweiyi.com/2013/03/configurate-solr-src-in-eclipse/ 1. 下载solr的src包,并解压 2. 解压后,在解压后的根目录执 ...
- Sizzle源码分析:二 词法分析
上一篇我们了解了Sizzle的整体流程,下面我开始一点点分析各个流程,我们进行查询的第一步就是词法分析tokenize,同样先了解下思路,如果是#div_test > span input[ch ...
- New Concept English Two 25 67
$课文65 小象对警察 683. Last Christmas, the circus owner, Jimmy Gates, decided to take some presents to a ...