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用于遍历对象那个的可遍历属性(包括自身和继承)

猜你喜欢

转载自blog.csdn.net/helloyongwei/article/details/80400436