JavaScript 函数对象的prototype属性和this属性

函数也是对象的一种,函数执行的时候会创建 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' ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值