1、原型.isPrototypeOf(实例),判断原型对象是否是 参数实例 的 原型对象
function Obj(){}
var obj = new Obj();
console.log(Obj.prototype.isPrototypeOf(obj)); // true
2、根据实例对象 获得原型对象 Object.getPrototypeOf(实例)
function Obj(){}
var obj = new Obj();
var pro = Object.getPrototypeOf(obj);
3、判断一个对象的属性 属于 实例属性 还是 属于 原型属性
对象.hasOwnProperty(属性名称)
function Obj(){}
Obj.prototype.name = "protName";
var obj = new Obj();
obj.name = "objName";
console.log(obj.name); // objName
console.log(obj.hasOwnProperty('name')); // true 是实例属性
delete obj.name;
console.log(obj.name); // protName
console.log(obj.hasOwnProperty('name')); // fasle 不是实例属性,可能是原型属性
4、in 操作符 判断属性是否存在于 实例对象 和 原型对象中
function Obj(){};
Obj.prototype.name = 'lc';
var obj = new Obj();
console.log('name' in obj); // true 因为在原型中有
5、获取当前对象里的所有 key(不包括不可枚举的) 返回一个数组
function Obj(){};
Obj.prototype.name = 'lc';
var obj = new Obj();
obj.age = 23;
console.log(Object.keys(obj)); // Array [ "age" ]
console.log(Object.keys(Obj.prototype)); // Array [ "name" ]
6、获取当前对象里的所有 key(包括不可枚举的e.g constructor) 返回一个数组
function Obj(){};
Obj.prototype.name = 'lc';
var obj = new Obj();
obj.age = 23;
console.log(Object.getOwnPropertyNames(obj)); // Array [ "age" ]
console.log(Object.getOwnPropertyNames(Obj.prototype)); // Array [ "constructor", "name"]