Object.prototype 中的成员:
1、constructor 构造器(构造函数)
作用:获取构造函数的引用
原型中提供的这个属性。
console.log(Student.prototype.constructor === Student);
console.log(Object.prototype.constructor === Object);
2、hasOwnProperty
作用:看下是否有自己的属性,如果属性是自己的,就返回true,否则返回false
has 有 own 自己的 property 属性
name1: "jack"
};
var b = obj.hasOwnProperty("name1");
console.log(b);// true
var b = obj.hasOwnProperty("age");
console.log(b);// false
var b = obj.hasOwnProperty("toString");
console.log(b);// false
3、isPrototypeOf
var 布尔值 = 对象1.isPrototypeOf(对象2)
作用:判断对象1 是否是 对象2 的原型,如果是则返回true,否则返回false(不严谨)
如果对象2的原型链上有 对象1 此时就返回 true,否则返回false(严谨)
p -> Person.prototype -> Object.prototype -> null
console.log(Person.prototype.isPrototypeOf(p)); // true
console.log(Object.prototype.isPrototypeOf(p)); // true
console.log(p.isPrototypeOf(p)); // false
4、 propertyIsEnumerable
property 属性 is 是 enumerable 可枚举的(循环便利)
语法:对象1.propertyIsEnumerable(属性1)
作用:看下对象1中的 属性1 是否是可枚举的,并且要求属性是自己的,如果是就返回true,否则返回false
① 看下属性是否是自己的 ② 属性是否是可枚举的
var obj = {
// name1: "jack"
};
var b = obj.propertyIsEnumerable("name1");
console.log(b); // true
var b = obj.propertyIsEnumerable("age");
console.log(b); // false
var b = obj.propertyIsEnumerable("toString");
console.log(b); // false
for(var k in obj) {
console.log(k);
}
ES5中的内容(了解)
Object.defineProperty(obj, "name1", {
value: "rose",
enumerable: false
});
var b = obj.propertyIsEnumerable("name1");
console.log(b); // false
for(var k in obj) {
console.log(k);
}
console.log(obj.name);
5、 toLocaleString / toString / valueOf
var d = new Date();
console.log(d.toString()); // 标准时间
console.log(d.toLocaleString()); // 本地时间
var obj = {};
console.log(obj.valueOf());
console.log(obj.toString()); //"[object Object]"
console.log(d.toString()); // 结果类型是字符串
console.log(d.valueOf()); // 结果类型是数值,时间的值为毫秒值
var obj = {};
console.log(obj + 1); // "[object Object]1"
console.log(parseInt(obj + 1)); // NaN
var obj = {
toString: function() {
return "abc";
},
valueOf: function() {
return 100;
}
};
对象在参与+操作的时候,先使用 valueOf方法,然后在使用 toString
console.log(obj + 1); // 101 结果类型是数值
console.log(obj + "a"); // 1001 结果类型是字符串
判断的本质就是回答下面两个问题:
① 对象的原型链 是什么时候定下来的?
② 当前构造函数的prototype的值是谁?
规律:
如果对象在被创建之后,构造函数的prototype没有改变过,就返回true,否则,返回false。
任何一个对象 instanceof Object 都是 true。
1、constructor 构造器(构造函数)
作用:获取构造函数的引用
原型中提供的这个属性。
默认情况下:构造函数.pototype中的 constructor属性 指向了 构造函数
举例:
Object.prototype.constructor === Object
function Student() {}console.log(Student.prototype.constructor === Student);
console.log(Object.prototype.constructor === Object);
2、hasOwnProperty
作用:看下是否有自己的属性,如果属性是自己的,就返回true,否则返回false
has 有 own 自己的 property 属性
语法:对象.hasOwnProperty(属性);返回值:true 或者 false
举例:
var obj = {name1: "jack"
};
var b = obj.hasOwnProperty("name1");
console.log(b);// true
var b = obj.hasOwnProperty("age");
console.log(b);// false
var b = obj.hasOwnProperty("toString");
console.log(b);// false
3、isPrototypeOf
var 布尔值 = 对象1.isPrototypeOf(对象2)
作用:判断对象1 是否是 对象2 的原型,如果是则返回true,否则返回false(不严谨)
如果对象2的原型链上有 对象1 此时就返回 true,否则返回false(严谨)
is 是 prototype 原型 of ...的
举例:
function Person() {}p -> Person.prototype -> Object.prototype -> null
var p = new Person();
console.log(p.isPrototypeOf(Person.prototype)); // falseconsole.log(Person.prototype.isPrototypeOf(p)); // true
console.log(Object.prototype.isPrototypeOf(p)); // true
console.log(p.isPrototypeOf(p)); // false
4、 propertyIsEnumerable
property 属性 is 是 enumerable 可枚举的(循环便利)
语法:对象1.propertyIsEnumerable(属性1)
作用:看下对象1中的 属性1 是否是可枚举的,并且要求属性是自己的,如果是就返回true,否则返回false
① 看下属性是否是自己的 ② 属性是否是可枚举的
var obj = {
// name1: "jack"
};
var b = obj.propertyIsEnumerable("name1");
console.log(b); // true
var b = obj.propertyIsEnumerable("age");
console.log(b); // false
var b = obj.propertyIsEnumerable("toString");
console.log(b); // false
for(var k in obj) {
console.log(k);
}
ES5中的内容(了解)
Object.defineProperty(obj, "name1", {
value: "rose",
enumerable: false
});
var b = obj.propertyIsEnumerable("name1");
console.log(b); // false
for(var k in obj) {
console.log(k);
}
console.log(obj.name);
5、 toLocaleString / toString / valueOf
var d = new Date();
console.log(d.toString()); // 标准时间
console.log(d.toLocaleString()); // 本地时间
var obj = {};
console.log(obj.valueOf());
console.log(obj.toString()); //"[object Object]"
console.log(d.toString()); // 结果类型是字符串
console.log(d.valueOf()); // 结果类型是数值,时间的值为毫秒值
var obj = {};
console.log(obj + 1); // "[object Object]1"
console.log(parseInt(obj + 1)); // NaN
var obj = {
toString: function() {
return "abc";
},
valueOf: function() {
return 100;
}
};
对象在参与+操作的时候,先使用 valueOf方法,然后在使用 toString
console.log(obj + 1); // 101 结果类型是数值
console.log(obj + "a"); // 1001 结果类型是字符串
6、 instanceof 运算符
作用:看下构造函数(Person)的prototype属性的值是否在 对象p 的原型链上,如果在就返回true ,否则就 返回false 。
语法:对象p instanceof 构造函数Person判断的本质就是回答下面两个问题:
① 对象的原型链 是什么时候定下来的?
② 当前构造函数的prototype的值是谁?
规律:
如果对象在被创建之后,构造函数的prototype没有改变过,就返回true,否则,返回false。
任何一个对象 instanceof Object 都是 true。