对象oop的属性和方法以及区别
//1.constructor 保存对象的创建函数 就是它的创造者 例如:
var obj = {};
var arr = [];
console.log(obj.constructor); // function Object() { [native code] } Object类是基类
console.log(arr.constructor); // function Array() { [native code] }
//1.constructor 保存对象的创建函数 就是它的创造者 例如:
var obj = {};
var arr = [];
console.log(obj.constructor); // function Object() { [native code] } Object类是基类
console.log(arr.constructor); // function Array() { [native code] }
//2.hasOwnProperty('属性的名称'):用于检测给定属性在当前对象中(而不是原型中)是否存在 例如:
obj.name = '程5';
obj.age = 28;
console.log(obj); //{name: "程5", age: 28}
console.log(obj.hasOwnProperty('name')); // true
console.log(obj.hasOwnProperty('height')); // false
//2.hasOwnProperty('属性的名称'):用于检测给定属性在当前对象中(而不是原型中)是否存在 例如:
obj.name = '程5';
obj.age = 28;
console.log(obj); //{name: "程5", age: 28}
console.log(obj.hasOwnProperty('name')); // true
console.log(obj.hasOwnProperty('height')); // false
//3.isPrototypeOf(obj) 检测原型 函数用于指示对象是否存在于另一个对象的原型链中。如果存在,返回true,否则返回false。例如
function Site() {
this.name = "chengMX";
this.url = "http://write.blog.csdn.net/postlist";
this.sayHello = function() {
console.log("欢迎来到" + this.name);
};
}
var s = new Site();
console.log(Site.prototype.isPrototypeOf(s)); // true
var obj2 = {
engine: "javascript",
sayHi: function() {
document.writeln("欢迎访问" + this.url);
}
};
// 使用对象obj覆盖Site本身的prototype属性
Site.prototype = obj2;
var s2 = new Site();
console.log(obj2.isPrototypeOf(s2)); // true
//3.isPrototypeOf(obj) 检测原型 函数用于指示对象是否存在于另一个对象的原型链中。如果存在,返回true,否则返回false。例如
function Site() {
this.name = "chengMX";
this.url = "http://write.blog.csdn.net/postlist";
this.sayHello = function() {
console.log("欢迎来到" + this.name);
};
}
var s = new Site();
console.log(Site.prototype.isPrototypeOf(s)); // true
var obj2 = {
engine: "javascript",
sayHi: function() {
document.writeln("欢迎访问" + this.url);
}
};
// 使用对象obj覆盖Site本身的prototype属性
Site.prototype = obj2;
var s2 = new Site();
console.log(obj2.isPrototypeOf(s2)); // true
//4.propertyIsEnumerable(‘属性名称’) :1.这个属性必须属于实例的,并且不属于原型.
2.这个属性必须是可枚举的,也就是自定义的属性,可以通过for..in循环出来的.
var obj3 = {
toString: function() {
return 'Hello!'
}
}
obj3.hasOwnProperty('toString') //返回 true
console.log(obj3.propertyIsEnumerable('toString')); //true
// 为了便利起见,规范确定某些属性默认是不可枚举的,比如Object.prototype.toString所以你 for (key in {}),是不会遍历到toString的。所有自定义属性默认是可枚举的,所以 for (key in {toString: ...}),是会遍历到toString的。为了避免你自定义的toString被枚举,可以用Object.defineProperty(obj, 'toString', {value: ..., enumerable: false})
//4.propertyIsEnumerable(‘属性名称’) :1.这个属性必须属于实例的,并且不属于原型.
2.这个属性必须是可枚举的,也就是自定义的属性,可以通过for..in循环出来的.
var obj3 = {
toString: function() {
return 'Hello!'
}
}
obj3.hasOwnProperty('toString') //返回 true
console.log(obj3.propertyIsEnumerable('toString')); //true
// 为了便利起见,规范确定某些属性默认是不可枚举的,比如Object.prototype.toString所以你 for (key in {}),是不会遍历到toString的。所有自定义属性默认是可枚举的,所以 for (key in {toString: ...}),是会遍历到toString的。为了避免你自定义的toString被枚举,可以用Object.defineProperty(obj, 'toString', {value: ..., enumerable: false})
//5.toLocaleString(),toString(),valueOf() 返回对象的字符串表示 但是valueOf 是返回对象的字符串、数值、布尔表示
// 其中,调用数组的toString()和valueOf方法会返回相同的值,即由数组中每个值的字符串形式拼接而成的一个以逗号分割的字符串。
// 实际上,为了创建这个字符串会调用数组每一项的toString()方法。
var colors = ["red", "blue", "green"]; //创建一个包含3个字符串的数组
alert(colors.toString()); //red, blue, green
alert(colors.valueOf()); //red,blue,green
alert(colors); //red,blue,green
// 在这里,首先显式地调用了toString()和valueOf()方法,以便返回数组的字符串表示,每个值的字符串都表示拼接成了一个字符串,中间可以逗号分割。
// 最后一行代码直接将数组传递给了alert()。由于alert()要接受字符串参数,所以它会在后台调用toString()方法,由此会得到与直接调用toString()方法相同的结果。
// 另外,toLocalString()方法经常也会返回与toString()和valueOf()方法相同的值,但也不总是如此。
// 当调用数组的toLocaleString()方法时,它也会创建一个数组的以逗号分割的字符串。
// 而与前两个方法唯一的不同指出在于,这因此i是为了取得每一项的值,调用的是每一项的toLocaleString()方法,而不是toString()方法。
var person1 = {
toLocaleString: function() {
return "Nikolaos";
},
toString: function() {
return "Nicholas";
}
}
var person2 = {
toLocaleString: function() {
return "Grigorios";
},
toString: function() {
return "Greg";
}
};
var people = [person1, person2];
alert(people); //Nicholas,Greg
alert(people.toString()); //Nicholas,Greg
alert(people.toLocaleString()); //Nikolaos,Grigorios
//5.toLocaleString(),toString(),valueOf() 返回对象的字符串表示 但是valueOf 是返回对象的字符串、数值、布尔表示
// 其中,调用数组的toString()和valueOf方法会返回相同的值,即由数组中每个值的字符串形式拼接而成的一个以逗号分割的字符串。
// 实际上,为了创建这个字符串会调用数组每一项的toString()方法。
var colors = ["red", "blue", "green"]; //创建一个包含3个字符串的数组
alert(colors.toString()); //red, blue, green
alert(colors.valueOf()); //red,blue,green
alert(colors); //red,blue,green
// 在这里,首先显式地调用了toString()和valueOf()方法,以便返回数组的字符串表示,每个值的字符串都表示拼接成了一个字符串,中间可以逗号分割。
// 最后一行代码直接将数组传递给了alert()。由于alert()要接受字符串参数,所以它会在后台调用toString()方法,由此会得到与直接调用toString()方法相同的结果。
// 另外,toLocalString()方法经常也会返回与toString()和valueOf()方法相同的值,但也不总是如此。
// 当调用数组的toLocaleString()方法时,它也会创建一个数组的以逗号分割的字符串。
// 而与前两个方法唯一的不同指出在于,这因此i是为了取得每一项的值,调用的是每一项的toLocaleString()方法,而不是toString()方法。
var person1 = {
toLocaleString: function() {
return "Nikolaos";
},
toString: function() {
return "Nicholas";
}
}
var person2 = {
toLocaleString: function() {
return "Grigorios";
},
toString: function() {
return "Greg";
}
};
var people = [person1, person2];
alert(people); //Nicholas,Greg
alert(people.toString()); //Nicholas,Greg
alert(people.toLocaleString()); //Nikolaos,Grigorios
//6.delete 删除对象的属性 例如
console.log(obj);//{name: "程5", age: 28}
delete obj.name;
console.log(obj);//{age: 28}
//6.delete 删除对象的属性 例如
console.log(obj);//{name: "程5", age: 28}
delete obj.name;
console.log(obj);//{age: 28}