JS学习笔记(四)this和原型对象
学习this和原型对象
文章目录
一、this
解析器(浏览器)在调用函数时每次都会向函数内部传进一个隐含的参数,即this。this指向的是一个对象,称为函数执行的上下文对象。
函数调用方式不同,this会指向不同的对象。
1.以函数形式时调用this
以函数形式时调用this,this是window
2.以方法形式时调用this
以方法形式时调用this,this是方法的对象
3.以构造函数形式时调用this
以构造函数形式时调用this,this是新创建的那个对象
4.使用call()和apply()时调用this
使用call和apply时,this是函数参数()中指定的对象。
二、原型对象
1.原型prototype
- 每创建一个函数,解析器向函数中添加一个属性prototype,该属性对应一个对象,即所谓的原型对象。即每个函数都有一个prototype属性,对应原型对象。
- 当函数通过构造函数调用时,它所创建的对象中都会有一个隐含的属性,通过__proto__来访问该属性
function MyClass(){
}
MyClass.prototype.a = 123;
MyClass.prototype.sayName = function(){ };
var mc = new MyClass();
var mc2 = new MyClass();
var mc3 = new MyClass();
console.log(MyClass.prototype == mc.__proto__);//true
同一个类的所有实例都可以访问原型对象。
- 访问一个对象的属性和方法时,先在对象自身中寻找,找不到再去原型对象中寻找,如果没有,则去原型的原型中找,直到找到Object对象的原型。
- Object对象的原型没有原型,如果在Object的原型里还没找到,返回undefined。
(理解:可以无限寻找原型对象找到Object的原型为止)
2.检查对象中是否存在属性
1. in
使用语法:"属性名" in 对象
- 如果对象中没有该属性,但是原型中有,也会返回true。
2. hasOwnProperty()
使用语法:对象.hasOwnProperty(“属性名”)
- 当且仅当对象中有该属性才会返回true。
3.修改 toString()方法
在页面打印一个对象时,事件上是输出的对象的toString()方法的返回值。
- 如果希望在打印对象时不输出Object,可以为对象添加toString()方法。
function MyClass(){
}
var mc = new MyClass();
console.log(mc.toString()); //[object Object]
mc.toString = function(){
return "被修改啦";
}
console.log(mc.toString()); //被修改啦