构造函数和原型对象的理解

构造函数就是类 对象 使用instanceof可以检查一个对象是否是一个类的实例 对象instanceof 构造函数
function Person(name,age,gender) {
  this.name = name;
  this.age = age;
  this.gender = gender;
  this.sayName = function(){
    alert('Hello大家好,我是'+this.name);
  };
}
var per = new Person('孙悟空',18,'男');
var per2 = new Person('玉兔精',16,'女');
var per3 = new Person('奔波霸',38,'男');
console.log(per)  // Person {name:'孙悟空',age:18,gender:'男',sayName:f}
console.log(per instanceof Person)  // true
原型prototype

我们所创建的每一个函数,解析器都会向函数中添加一个属性prototype
这个属性对应着一个对象,这个对象就是我们所谓的原型对象
当函数以构造函数的形式调用时,它所创建的对象中都会有一个隐含的属性 指向该构造函数的原型对象
原型对象就相当于一个公共区域,所有同一个类的实例都可以访问到这个原型对象
我们可以将对象中共有的内容,统一设置到原型对象中
当我们访问对象的一个属性和方法时,它会先在对象自身中寻找,如果有则直接使用,如果没有则会去原型对象中寻找
如果找到则直接使用
以后我们创建函数时,可以讲这些对象共有的属性和方法,统一添加到构造函数的对象中,这样就不用分别为每一个对象
添加,也不会影响到全局作用域,就可以使每个对象都具有这些属性和方法了

function MyClass() {

  }
  // 向MyClass的原型中添加属性a
  MyClass.prototype.a = 123;
  MyClass.prototype.name = '我是原型中的名字';
  // 向MyClass的原型中添加一个方法
  MyClass.prototype.sayHello = function() {
    alert('hello')
  };
  var mc = new MyClass();
  console.log(mc.__proto__ == MyClass.prototype) //true  原型
  console.log(mc.a)  //  123
  // mc.sayHello()    // alert hello
  // 使用in检查对象中是否含有某个属性时,如果对象中没有但是原型有,
  也会返回true
  console.log('name' in mc);  // true
  // 可以使用对象hasOwnProperty()来检查对象自身中是否含有该属性
  console.log(mc.hasOwnProperty('name')) // false
  // 原型对象也是对象,所以它也有原型 当我们使用一个对象的属性或方法时
  会先在自身中  寻找
  // 自身中如果有,则直接使用,如果没有则去原型对象中寻找 
  如果原型对象中有则使用
  // 如果没有则去原型的原型中寻找,直到找到Object对象的原型
  // Object对象的原型没有原型,如果在Object中依然没有找到 则返回undefined
  console.log(mc.__proto__.hasOwnProperty('hasOwnProperty'))  // false 
  console.log(mc.__proto__.__proto__.hasOwnProperty('hasOwnProperty'))
   // true
  console.log(mc.__proto__.__proto__.__proto__)  // null
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值