Object 构造方法

一、asign vs 扩展运算符 ...

1.共同点:都是浅拷贝

2.开发推荐 扩展运算符...

let obj={
name: 'Tom',
age: 18
};
let obj1={
name: 'Jack',
age: 15,
}
let obj2 = Object.assign({},obj, obj1);
let obj3 = {...obj1, ...obj2};
console.log(obj2); // { name: 'Jack', age: 15 }
console.log(obj3); // { name: 'Jack', age: 15 }

二、create

Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__。

将现有对象作新对象的 __proto__;

class Animal {
constructor(name,age){
this.name= name;
this.age=age;
}
run(){
console.log('动物会跑');
}
}
class Dog extends Animal{
constructor(name,age){
super(name,age)
}
bark(){
console.log('狗会叫');
}
}
let dog = new Dog('taidi',10);
console.log(dog);
let dog1 = Object.create(dog);
console.log(dog1);

三、defineProperty

四、for in keys values entries

1.for in 会遍历原型上的方法

function Person(){
this.name= 'jack';
this.age=18;
}
Person.prototype.height=180;
Person.prototype.weight=75;
Person.prototype.run=function(){
console.log('jack 在跑步');
} let p = new Person();
console.log(p);
/*
Person {name: "jack", age: 18}
age: 18
name: "jack"
__proto__:
height: 180
run: ƒ ()
weight: 75
constructor: ƒ Person()
__proto__: Object
*/
for(key in p){ // for in 会遍历原型上的方法
console.log(key); // name age height weight run
}
console.log(Object.keys(p)); // ["name", "age"] 返回一个新的数组,不会遍历原型上的方法
console.log(Object.values(p)); // ["jack", 18] 返回一个新的数组,不会遍历原型上的方法
console.log(Object.entries(p)); // [ [ 'name', 'jack' ], [ 'age', 18 ] ]

五、getPrototypeOf

Object.getPrototypeOf() 方法返回指定对象的原型

返回对象的原型

function Person(name,age){
this.name = name;
this.age = age;
} Person.prototype.height=180;
Person.prototype.weight=60; const p = new Person('jack',18);
console.log(Object.getPrototypeOf(p));

经典:判断是否是 plain object

/**
* @param {any} obj The object to inspect.
* @returns {boolean} True if the argument appears to be a plain object.
*/
export default function isPlainObject(obj) {
if (typeof obj !== 'object' || obj === null) return false let proto = obj
while (Object.getPrototypeOf(proto) !== null) {
proto = Object.getPrototypeOf(proto)
} return Object.getPrototypeOf(obj) === proto
}

Oject prototype 方法

一、hasOwnProperty

hasOwnProperty()方法用来判断某个对象是否含有指定的自身属性

用于检查给定的属性在当前对象实例中(而不是在实例原型中)是否存在

重点: for in vs hasOwnProperty

for in  会遍历出对象继承中的可枚举属性


遍历对象自有属性

function Person(){
this.name='tom';
this.age=18;
}
Person.prototype.height = 180;
let p = new Person();
for( let key in p){
if(p.hasOwnProperty(key)){
console.log("自身属性:"+key);// name ,age
}else{
console.log("继承别处的属性:"+key);// height
}
}

 二、isPropertyof

isPrototypeOf是用来判断要检查其原型链的对象是否存在于指定对象实例中,是则返回true,否则返回false。

isPrototypeOf vs instanceof

1.instanceof

object1.isPrototypeOf(Object2);(构造函数) : 用于判断object2的构造函数的object1是否在A的原型链上

2.isPropertyof

object1.isPrototypeOf(Object2); : 用于判断object1是否在object2的原型链上;

三、toString

let obj= {};
console.log(obj.toString()); // [object Object]

三、Object 对象常用操作方法的更多相关文章

  1. Set对象常用操作方法和遍历

    Set<String> set = new HashSet<String>(); /** * set的常用操作方法有: * add()向集合添加元素 clear()清空集合元素 ...

  2. JavaScript之Object对象常用属性与方法手册

    MDN Object参考地址:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Obje ...

  3. 【QTP专题】04_对象及操作方法

    本节介绍知识点包括 1.QTP自动化的原理 2.两类对象:TO(测试对象).RO(运行对象) 3.操作方法:SetTOProperty,GetROProperty,GetTOProperty 1.QT ...

  4. Python文件常用操作方法

    Python文件常用操作方法 一.对File对象常用操作方法: file= open(file, mode='r', buffering=-1, encoding=None, errors=None, ...

  5. JavaScript:对Object对象的一些常用操作总结

    JavaScript对Object对象的一些常用操作总结. 一.Object.assign() 1.可以用作对象的复制 var obj = { a: 1 }; var copy = Object.as ...

  6. js中对Object对象的一些常用操作总结

    前言我前面的文章,写过js中“类”与继承的一些文章.ES5我们可以通过 构造函数 或者 Object.create()等方式来模拟出js中的“类”,当然,对象呢是类的实例化,我们可以通过如下方式创建对 ...

  7. JAVA(三)JAVA常用类库/JAVA IO

    成鹏致远 | lcw.cnblog.com |2014-02-01 JAVA常用类库 1.StringBuffer StringBuffer是使用缓冲区的,本身也是操作字符串的,但是与String类不 ...

  8. 详解JavaScript中的Object对象

    Object是在javascript中一个被我们经常使用的类型,而且JS中的所有对象都是继承自Object对象的.虽说我们平时只是简单地使用了Object对象来存储数据,并没有使用到太多其他功能,但是 ...

  9. python 字符串常用操作方法

    python 字符串常用操作方法 python 字符串操作常用操作,如字符串的替换.删除.截取.赋值.连接.比较.查找.分割等 1.去除空格 str.strip():删除字符串两边的指定字符,括号的写 ...

随机推荐

  1. 【2018.04.27 C与C++基础】关于switch-case及if-else的效率问题

    对于这个问题自己是比较清楚的,在分支比较多时,switch-case的效率肯定比if-else的要高许多,其原理类似于我们在优化某些程序时使用查表来代替算法计算一样. 如果想进一步深究的话,可以查看G ...

  2. JDK动态代理和cglib代理详解

    JDK动态代理 先做一下简单的描述,通过代理之后返回的对象已并非原类所new出来的对象,而是代理对象.JDK的动态代理是基于接口的,也就是说,被代理类必须实现一个或多个接口.主要原因是JDK的代理原理 ...

  3. Boolean类型在EF和MySql中的映射关系

    MySQL没有Boolean类型.这也是比较奇怪的现象.例: create table xs ( id int primary key, bl boolean ) 这样是可以创建成功,但查看一下建表后 ...

  4. TCP Health Checks

    This chapter describes how to configure health checks for TCP. Introduction NGINX and NGINX Plus can ...

  5. (转)Spring Boot(三):Spring Boot 中 Redis 的使用

    http://www.ityouknow.com/springboot/2016/03/06/spring-boot-redis.html Spring Boot 对常用的数据库支持外,对 Nosql ...

  6. form表单post请求乱码问题

    今天做一个查询的小模块遇到了 请求乱码的问题,表单请求方式是post 解决方法是在web.xml 文件中配置一下内容 <!--配置解决post乱码问题filter --> <filt ...

  7. xss攻击(跨站脚本)

    原理跨站脚本(Cross site script,简称xss)是一种“HTML注入”,由于攻击的脚本多数时候是跨域的,所以称之为“跨域脚本”. 我们常常听到“注入”(Injection),如SQL注入 ...

  8. 002_pip安装失败

    一.安装cmdb的驱动遇到了如下问题 [root@localhost 003_pyenv]# pip2.7 install cmdb_sdk==0.3.1 -i http://cmdb.elenet. ...

  9. (0)HomeAssistant 教程

    国外:https://www.home-assistant.io/components/light.mqtt/ 中国:https://www.hachina.io/docs/890.html

  10. Generative Adversarial Nets[iGAN]

    本文来自<Generative Visual Manipulation on the Natural Image Manifold>,是大神Jun-Yan Zhu在2016年9月的作品. ...