Object对象与继承

Object.getPrototypeOf()

这个方法返回参数对象那个的原型

function fn(){}
var f = new fn()
Object.getPrototypeOf(f) === fn.prototype

注意几个特殊对象的原型

// 空对象的原型是 Object.prototype
Object.getPrototypeOf({}) === Object.prototype // true

// Object.prototype 的原型是 null
Object.getPrototypeOf(Object.prototype) === null // true

// 函数的原型是 Function.prototype
function f() {}
Object.getPrototypeOf(f) === Function.prototype // true

Object.setPrototypeOf()

该方法为参数对象设置原型, 返回该参数对象.它接受两个参数,第一个是现有对象,第二个是原型对象

var a = {};
var b = {x: 1};
Object.setPrototypeOf(a, b);

Object.getPrototypeOf(a) === b // true
a.x // 1

Object.create()

  • Object.create()用来创建以参数对象为原型的实例对象. 且实例对象完全继承原型对象的属性
  • Object.create()方法生成的实例对象, 动态继承了原型对象, 在原型对象上的改动会反映在实例对象上.
  • Object.create()可以接受第二个参数对象, 这个对象会作为实例对象的自身属性
var obj = Object.create({}, {
  p1: {
    value: 123,
    enumerable: true,
    configurable: true,
    writable: true,
  },
  p2: {
    value: 'abc',
    enumerable: true,
    configurable: true,
    writable: true,
  }
});

// 等同于
var obj = Object.create({});
obj.p1 = 123;
obj.p2 = 'abc';

Object.prototype.isPrototypeOf() 方法判断对象是否是参数对象的原型
function fn(){}
var f = new fn()
fn.prototype.isPrototypeOf(f)   //true

Object.prototype.__proto__

这个属性在大多数浏览器中都有实现. 实例对象可以用这个属性找到其原型

var obj = new Object();

obj.__proto__ === Object.prototype
// true

Object.getOwnPropertyNames()

该方法返回一个数组, 它接收一个参数对象, 返回这个对象本身的所有属性的键名(不包含继承的)

Object.getOwnPropertyNames(Date)
// ["parse", "arguments", "UTC", "caller", "name", "prototype", "now", "length"]

Object.keys()

该方法返回参数对象的可遍历属性.

Object.keys(Date) //[], 表示Date对象没有可遍历属性

Object.prototype.hasOwnProperty()

该方法接收一个键名作为参数, 判断该键名是否是对象的自身属性. true表示是对象的自身属性

运算符

  • in运算符可以用于判断属性是否属于对象, 不区分自身属性和继承属性. 返回布尔值
  • for-in用于遍历对象那个的可遍历属性(包括自身和继承)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值