js对象、this指针、对象的一些方法
js对象
javascript中一切都是对象(数组、字符、数字、布尔、正则、日期)。
example1
var obj = new Object();//构造函数写法
obj.name = 'xiaohong';
obj.sex = 'female';
obj.say = function(){console.log("hello")}
console.log(obj.name);//xiaohong
console.log(obj['name']);//xiaohong
obj.say();//hello
var obj2 = {
name:'xiaoming',
'sex':'female',
say:function(){console.log('hello')}
}//字面量写法 json数据格式
console.log(obj2.name);//xiaoming 对象 + . + 属性名
console.log(obj2['name']);//xiaoming 对象 + [ + ' + 属性名 + ' + ]
obj = null; //释放没有引用指向的对象占用的内存。
console.log(typeof new String('123'));//object
js中新建一个对象可以通过new或者{}来创建,使用后者比较方便。
example2
var obj = {
'name':'aa',
'sex':'male',
'e-mail':'[email protected]'
}
console.log(obj['e-mail']);//[email protected]
console.log(obj.e-mail);//报错
na = 'name';
console.log(obj[na]);
对象属性的引用用方括号和点差不多,但方括号引用可以引用一些特殊情况的字符,比如空格,减号等。而且点方法引用属性可以引用变量。
this指针
this指针在21总结中有说过,这里仅做一些补充。记住,this谁调用的指向谁。
example3
var name = 'outer';
var obj = {
name:'inner',
log:function(){
function fn(){console.log(this.name)}
return fn;
},
log2:function(){
console.log(name);
console.log(this.name);
}
}
obj.log()();//outer
obj.log2();//inner outer
var log = obj.log2;
log();//outer outer 这里相当于window.log()。
对象的一些方法
example4
function Person(){}
Person.prototype.name = 'x';
var person = new Person();
person.sex = 'man';
console.log('name' in person);//true
console.log('sex' in person);//true
console.log(person.hasOwnProperty('name'));//false
console.log(person.hasOwnProperty('sex'));//true
delete person.sex;
delete person.name;
console.log(person.name);//x
console.log(person.sex);//undefined
example5
var data1 = {
a:1,
b:2
}
var data2 = {
c:3,
a:4
}
var data3 = {
d:5,
f:6
}
//合并对象重复的属性
function combine(target,source){
var args = arguments;
if(args.length === 1) return target;
var index = 1;
while(source = args[index++]){
for(var k in source) if(source.hasOwnProperty(k)){
target[k] = source[k];
}
}
return target;
}
console.log(combine({},data1,data2,data3));//{a: 4, b: 2, c: 3, d: 5, f: 6}
//使用Object的assign方法同样可以实现。
console.log(Object.assign({},data1,data2,data3));//{a: 4, b: 2, c: 3, d: 5, f: 6}
hasOwnProperty()
是用来判断一个对象是否有你给出名称的属性或对象。不过需要注意的是,此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员。而in
则可以检查到该对象的原型链中是否具有该属性。for...in
可以用来遍历对象属性。delete 可以删除对象中的属性和方法(不能删除原型链上的属性).