new Object
const obj = new Object()
obj.name = 'Lance'
const obj = { name: 'Lance' }
function createObj(name) {
const obj = new Object()
obj.name = name
return obj
}
const obj = createObj('Lance')
function Person(name) {
this.name = name
}
const person = new Person('Lance')
hasOwnProperty
hasOwnProperty返回一个布尔值,指出一个对象是否具有指定名称的属性。此方法不会检查该对象的原型链中是否具有该属性;该属性必须是对象本身的一个成员。
使用方法: object.hasOwnProperty(proName) 其中参数object是必选项。一个对象的实例。 proName是必选项。一个属性名称的字符串值。 如果 object 具有指定名称的属性,那么JavaScript中hasOwnProperty函数方法返回 true,反之则返回 false。
只要右边变量的
prototype
在左边变量的原型链上即可。
思路
proto = proto.__proto__
,沿着原型链一直向上查找)__proto__
上找到了当前类的原型prototype
,则返回 true
Object.prototype.__proto__ == null
,Object的基类(null)上面都没找到,则返回 falsefunction myInstanceof(obj, Func) {
let __proto__ = obj.__proto__; // 拿到对象原型
let prototype = Func.prototype; // 拿到构造函数原型
while (true) {
if (__proto__ === null) { // 退出条件: 找到了 Object的基类 Object.prototype.__proto__
return false;
}
if (__proto__ === prototype) { // 在对象的原型链上找到了构造函数
return true;
}
__proto__ = __proto__.__proto__; // 沿着原型链 __proto__ 一层一层向上查找
}
}
优化版 (处理兼容问题)