1.对象是通过引用来传递,它们永远不会被复制。
var x={};
var stooge=x;
stooge['a']='aaa';
console.log(x.a);//aaa
2.可以通过给Object增加一个create方法,创建一个原对象作为其原型的新对象,从而实现复制的效果。即改变新对象的值不会影响该对象的原型。
if(typeof Object.beget!=='function'){
Object.create=function(o){
var F=function(){};
F.prototype=o;
return new F();
}
}
var another_stooge=Object.create(stooge);
- typeof用于确定对象的类型。(它会去检查原型链)
hasOwnProperty方法不会去检查原型链。
4.for in 可用来遍历一个对象中所有属性名,但是包括函数和原型链中的属性也会被遍历,这时,可以通过typeof或hasOwnProperty来排除你不想要的值。
var name;
for(name in another_stooge){
if(typeof another_stooge[name] !=='function'){
console.log(name+':'+another_stooge[name])
}
}
但for in 方式属性出现的顺序时不确定的。
for循环是确定的。
推荐使用数组存储变量值,然后使用for循环取遍历。(但个人觉得有你并不知道对象中有哪些key值,所以for in还是很有必要的。)
var arr=['a','b','c'];
for(var i=0;i<arr.length;i++){
console.log(arr[i]+':'+another_stooge[arr[i]]);
}
5.delete运算符可以用来删除对象的属性,如果对象包含该属性,那么该属性就会被移除,它不会触及原型链中的任何对象。
删除对象的属性可能会让原型链中的属性透显出来。
6.减少全局变量污染,最小化使用全局变量的方法之一是为你的应用只创建一个唯一的全局变量。把其它的变量或函数都放置该全局变量下。
var MyApp={};
MyApp.stooge={
'first-name:'aaa'
};
MyApp.flight=function(){}