<!DOCTYPE html>
<html>
<head>
<title>对象常用方法</title>
</head>
<body>
<script type="text/javascript">
// 1. isPrototypeOf();
// Person.prototype.isPrototypeOf(p1); // true
// 2. Object.getPrototypeOf(); 根据实例对象寻找原型对象
function Person() {
}
Person.prototype.name = "z3";
Person.prototype.age = 20;
Person.prototype.sayName = function() {
alert("我是原型对象的方法");
}
/*
var p1 = new Person();
alert(Object.getPrototypeOf(p1) == Person.prototype); // true
*/
/* var p2 = new Person();
alert(p2.name); // z3
p2.name = "w5";
alert(p2.name); // w5
// 代码读取一个是对象属性的时候,首先进行一次搜索,在实例对象中查找name属性,若没有,再在原型对象中查找name属
// 性,若没有返回undefined; 用delete关键字删除实例属性之后,可得到原型属性
delete p2.name;
alert(p2.name); // z3
*/
// 3. 判断一个对象是属于原型属性,还是属于实例属性.
// 3.1 obj.hasOwnProperty(); 判断是否属于对象本身,即实例属性
/* var p3 = new Person();
alert(p3.hasOwnProperty('name')); // false
p3.name = "m7";
alert(p3.hasOwnProperty('name')); // true
*/
// 3.2 in操作符 for-in 判断属性是否再实例对象或者原型对象中
var p1 = new Person();
alert('name' in p1); // true
// 3.3 判断一个属性是否只在原型对象中
function hasPrototypeProperty(object, name) {
return !object.hasOwnProperty('name') && 'name' in object ;
}
alert(hasPrototypeProperty(p1, 'name')); // true
// 4. Object.keys(); 返回数组,枚举出实例对象的属性,不包含原型属性,不包含不可枚举属性,例如constructor属性
p1.name = "z3";
p1.age = 20;
alert(Object.keys(p1)); // name,age
// 4.2 Object.getOwnPropertyNames(); 返回所有可枚举和不可枚举属性
alert(Object.getOwnPropertyNames(Person.prototype)); // constructor,name,age,sayName
</script>
</body>
</html>
<html>
<head>
<title>对象常用方法</title>
</head>
<body>
<script type="text/javascript">
// 1. isPrototypeOf();
// Person.prototype.isPrototypeOf(p1); // true
// 2. Object.getPrototypeOf(); 根据实例对象寻找原型对象
function Person() {
}
Person.prototype.name = "z3";
Person.prototype.age = 20;
Person.prototype.sayName = function() {
alert("我是原型对象的方法");
}
/*
var p1 = new Person();
alert(Object.getPrototypeOf(p1) == Person.prototype); // true
*/
/* var p2 = new Person();
alert(p2.name); // z3
p2.name = "w5";
alert(p2.name); // w5
// 代码读取一个是对象属性的时候,首先进行一次搜索,在实例对象中查找name属性,若没有,再在原型对象中查找name属
// 性,若没有返回undefined; 用delete关键字删除实例属性之后,可得到原型属性
delete p2.name;
alert(p2.name); // z3
*/
// 3. 判断一个对象是属于原型属性,还是属于实例属性.
// 3.1 obj.hasOwnProperty(); 判断是否属于对象本身,即实例属性
/* var p3 = new Person();
alert(p3.hasOwnProperty('name')); // false
p3.name = "m7";
alert(p3.hasOwnProperty('name')); // true
*/
// 3.2 in操作符 for-in 判断属性是否再实例对象或者原型对象中
var p1 = new Person();
alert('name' in p1); // true
// 3.3 判断一个属性是否只在原型对象中
function hasPrototypeProperty(object, name) {
return !object.hasOwnProperty('name') && 'name' in object ;
}
alert(hasPrototypeProperty(p1, 'name')); // true
// 4. Object.keys(); 返回数组,枚举出实例对象的属性,不包含原型属性,不包含不可枚举属性,例如constructor属性
p1.name = "z3";
p1.age = 20;
alert(Object.keys(p1)); // name,age
// 4.2 Object.getOwnPropertyNames(); 返回所有可枚举和不可枚举属性
alert(Object.getOwnPropertyNames(Person.prototype)); // constructor,name,age,sayName
</script>
</body>
</html>