this
⑧this 上下文对象,当在函数中调用时,指的是window;当在方法中调用时,指的是调用的对象;当在构造器中调用时,指的是构造器创建的那个对象。
构造器使用工厂方方法创建对象
⑨构造器执行步骤:->立即创建一个新的对象->将新建的对象设置为this->执行构造器中的方法->返回对象
同一个构造器创建的对象就是同类对象
可使用 (对象1)instantceof(对象2) 检查是否为同类对象
任一构造器创建的对象都与object同一类,原因为继承关系
funtion person (name, age,gender) {
this.name=name;
this.age=age;
this.gender=gender;
}
person.prototype.sayName(){
alert(this.name);
};
var obj1= new person("猪八戒",12,"nan");
var obj2 =new Person("baigujin",13,"nv ");
prototype原型对象
⑩创建的每一个函数,解析器都会自动给函数添加一个隐含属性prototype,即原型对象,当函数用以构造器的形式调用时,也会给对象添加一个prototype属性,且函数与该函数创造的对象指向同一个prototype;
11.可以通过__proto__
访问;
12.原型对象相当于同类对象中的一个公共区域,我们可以在prototype中写大家都有的属性或者方法,书写方式:obj.prototype.a=123;
13.访问时可以直接obj1.a,因为解析器执行时会先在对象的一级属性中寻找,找不到就会去原型对象中找。
hasOwnproperty()
15.hasOwnproperty()是原型中的原型对象自带的函数,原型对象也是对象,他里头也有一个原型对象,所以解析器执行时会先在对象的一级属性中寻找,找不到就会去原型对象中找,还找不到,就到原型的原型对象中寻找,再找不到可就没了!!
15.只有原型的原型,后面不再有原型了昂,所以
console.log(mc.__proto__.hasOwnproperty("hasOwnproperty"))
返回faulse;
console.log(mc.__proto__.__proto__.hasOwnproperty("hasOwnproperty"))
返回ture;
console.log(mc.__proto__.__proto__.__proto__)
返回null;
14.对象自己没有但原型中有的属性,使用in来检测,如a in mc,则返回ture;
使用hasOwnproperty()检测返回的是false,因为只检测一级属性,使用方式mc.hasOwnproperty(“a”);