1、Object.getPrototypeOf() 返回参数对象上的原型,获取原型对象的标准方法。
三种特殊原型
2、Object.setPrototypeOf() 为参数对象设置原型并返回改参数对象,它接收两个参数
第一个是现有对象 第二个实原型对象
new命令可以用Object.setPrototypeOf()进行模拟
3、Object.create() 该方法生成的对象继承了它的原型对象的构造函数
语法
Object.create(Object,{item1,item2})
其中Object是要继承的原型对象,item1,item2(非必填),为对象参数的属性对象,实例
以下三种方式生成的新对象是等价的
如果不想集成任何属性则可用Object.create(null)
4、Object.prototype.isPrototypeOf()
isPrototypeOf() 判断该对象是都为参数对象的原型
例
Object.prototype因为处在原型链的最顶端,所以对各种实例都返回true,只有继承自null的对象除外
5、 Object.prototype.proto 返回该对象的原型,该属性可读写
可以将某个对象设置为另一个对象的原型例
根据语言标准_proto_属性只有浏览器才需要部署,其它环境没有这个属性,前后两根下划线表示它的本质是一个内部属性不应该对使用者暴露因此应该尽可能少的使用这个属性而是用Object.setPrototypeOf()和Object.getPrototypeOf()来进行原型对象的读写操作
6、获取原型对象的三种方法
obj.proto(只有浏览器有这个属性)
obj.constructor.prototype (手动设置会失效)
Object.getPrototypeOf(obj)
推荐使用第三种
7、Object.getOwnPrototypeNames() 返回参数本身所有属性的键名的数组。不包含继承的属性键名
8、Object.prototype.hasOwnProperty()
返回一个布尔值,用于判断某个属性定义在对象自身还是定义在原型链上。是js中唯一一个处理对象属性时不会遍历原型链的方法
使用示例
Date.hasOwnProperty('length') // true
Date.hasOwnProperty('toString') // false
9,对象拷贝的两种方法
拷贝一个对象应该确保拷贝后的对象与原对象有相同的原型和示例属性
function copyObject(orig) {
var copy = Object.create(Object.getPrototypeOf(orig));
copyOwnPropertiesFrom(copy, orig);
return copy;
}
function copyOwnPropertiesFrom(target, source) {
Object
.getOwnPropertyNames(source)
.forEach(function (propKey) {
var desc = Object.getOwnPropertyDescriptor(source, propKey);
Object.defineProperty(target, propKey, desc);
});
return target;
}
es6简单写法
function copyObject(orig) {
return Object.create(
Object.getPrototypeOf(orig),
Object.getOwnPropertyDescriptors(orig)
);
}