函数对象
函数也是对象的一种,函数执行的时候会创建 this 和 prototype 属性
一、this 属性(对象类型)
关于这个 this 对象的理解,还是通过例子解释:
- 在实例化的时候,obj对象赋值,且函数返回obj,这些是我们自己定义的行为
- 例子2 ,是不是跟常见带参数的函数(例子3)类似,是的啦
重点来了:
- 函数中的this 属性是函数内部自带的,且 函数最后隐藏了执行一句 return this 语句,形如例子4的写法
- 如果函数最后return 引用值类型,将会覆盖自带的return this,瞧例子 5
// ------------例子1
function Car(){
var obj = {
color:'red',
brand:'benze',
}
return obj;
}
console.log(new Car()); //{ color: 'red', brand: 'benze' }
// ------------例子2
function Car(color,brand){
var obj = {
color:color,
brand:brand,
}
return obj;
}
console.log(new Car('gree','Menza')); //{ color: 'gree', brand: 'Menza' }
//-----------------例子3
function Car(color, brand) {
this.color = color;
this.brand = brand;
}
console.log(new Car('gree', 'Menza')); // Car { color: 'gree', brand: 'Menza' }
//------------例子4
function Car(color, brand) {
var this = {};
this.color = color;
this.brand = brand;
return this;
}
//------------例子5
function Car(color, brand) {
var obj = {
name:'obj',
}
this.color = color;
this.brand = brand;
return obj;
}
var car = new Car('gree', 'Menza');
console.log(car.color); //undefined
console.log(car.name); //obj
所以对 this 对象 有 更深一点点的理解吧?
二、prototype 属性(对象类型)
- 在 prototype 上定义的属性和方法可以被对象实例 共享。
三、关于对象属性常见的方法
3.1、delete 实例.属性:delete person1.age
- 删除实例的属性(this对象里的)
// delete 删除的是 实例的属性
function Person(){
this.age = 18;
}
Person.prototype.sex = 'female';
var person1 = new Person();
delete person1.age;
delete person1.sex;
console.log(person1);// {}
console.log(Person.prototype.sex);//female
3.2、in 操作符
- 判断对象 是否存在 某属性,查找范围是:实例 + 原型;
- 存在 返回 true ,反之 false ;
function Person(){
this.age = 18;
}
Person.prototype.sex = 'female';
var person1 = new Person();
console.log('age' in person1); //true
console.log('sex' in person1); //true
console.log('name' in person1); // false
3.3、for…in 遍历对象属性
- 属性范围:实例属性+ 原型属性
function Person(){
this.age = 18;
}
Person.prototype.sex = 'female';
var person1 = new Person();
for(var item in person1){
console.log(item);
}
//打印 age sex
3.4、hasOwnProperty() 判断某个属性是否在实例上
- 在实例上 返回 true
function Person(){
this.age = 18;
}
Person.prototype.sex = 'female';
var person1 = new Person();
console.log(person1.hasOwnProperty('age')); //true
console.log(person1.hasOwnProperty('sex')); //false
console.log(person1.hasOwnProperty('name')); //false
3.5、Object.keys() 获取实例上的属性数组
function Person(){
this.age = 18;
}
Person.prototype.sex = 'female';
var person1 = new Person();
person1.weight = 50;
console.log(Object.keys(person1)); // [ 'age', 'weight' ]