<script>
// 第一个技巧 可枚举不可枚举
//Object.properyIsEnumerable 检测一个属性是否可以枚举
// Object.prototype.aaa = function () {
// }
// var obj = {name:"xx",age:7};
// for(var key in obj){
//无论是私有的属性还是原型上的方法,for in都可以遍历到 但是一遍情况下,我们遍历一个对象只需要遍历私有的即可,我们可以使用以下判断进行处理
//1 第一种 遍历留下可枚举属性 目的相同
// if (obj.propertyIsEnumerable(key)) {
// console.log(key);
// }
//2 第二种 遍历留下私有属性
// if (obj.hasOwnProperty(key)) {
// console.log(key);
// }
// }
// obj.aaa();//可以
// obj.__proto__.aaa();
//2 第二个技巧
//Object.create();
//Object.create();方法创建一个拥有指定原型和若干个指定属性的对象
//Object.create(proPbj)创建一个新的对象,但是还要把proObj作为这个对象的原型,在IE6~8底下不兼容(ECMAScript 5)
//Object.create(proto[, propertiesObject])
//proto
//新创建对象的原型对象。
//propertiesObject
//可选。如果没有指定为 undefined,则是要添加到新创建对象的可枚举属性(即其自身定义的属性,而不是其原型链上的枚举属性)对象的属性描述符以及相应的属性名称。这些属性对应Object.defineProperties()的第二个参数。
// var obj = {
// // constructor:Fn,
// getX:function () {
// }
// };
// function Fn() {
// }
// Fn.prototype = obj;
// Fn.prototype.sum = function () {
// }
//对象之间克隆该如何克隆
//第一种办法
// var obj2 = {};
// for (var key in obj) {
// if (ojb.hasOwnproperty(key)) {
// obj2[key] = obj[key];
// }
// }
//将obj中的私有属性克隆到obj2中
//第二种办法
// var obj3 =Object.create(obj);
//利用create()obj3.__proto__==>obj
//obj.__proto__==>是Object
//模拟 object.create()
var obj = {
getX:function (){
}
};
function object(o) {
function Fn() {
}
Fn.prototype = o;
return new Fn;
}
var newObj = object(obj);
</script>
原型链深入
最新推荐文章于 2023-03-17 17:32:53 发布