#### 点运算符
点运算符可用来操作对象的属性。这里的操作可以分为获取和赋值两种类型。在赋值的情况下,如果对象原来没有所操作的属性则会添加,如果有则会修改其值。
代码示例:
```
var person = { name: 'zzh' };
person.age = 18;
console.log(person.name); // zzh
person.name = 'David';
console.log(person.name); // David
```
![测试结果](https://upload-images.jianshu.io/upload_images/2789632-455eaf5ad705fb77.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
#### this的含义
###### 书上说的三种子类型也不清楚是什么,暂且不做理解,只记一句话:
“谁直接调用方法,this就指向谁”。也就是说方法的点前面的对象就是this。
代码示例:
```
var color = 'red';
function Obj () {
var color = 'balck';
}
Obj.color = 'green';
Obj.prototype.logColor = function () {
console.log(this.color);
}
var o = new Obj();
o.color = 'blue';
o.logColor(); // blue
```
例子中一个有4个color, 一个是全局变量,一个是Obj的局部变量,一个是Obj的属性,还有一个是Obj创建的实例对象o的属性。logColor方法是Obj的prototype中的方法属性,其中打印了this.color的值。在调用o.logColor()时,这里使用使用对象o中的color属性,也就是blue,这是因为logColor方法是被o对象直接调用的。
#### 关联方法后的this
代码示例:
```
function logColor() {
console.log(this.color);
}
function Obj () {}
var o = new Obj();
Obj.color = 'red';
o.color = 'blud';
Obj.logColor = logColor;
o.logColor = logColor;
Obj.logColor(); // red
o.logColor(); // blue
```
谁调用方法this就指向谁!!!
#### 内部函数中的this
代码示例:
```
var v = 1;
function Program () {
var v = 2;
this.v = 3;
}
Program.prototype.logV = function () {
function innerLog () {
console.log(this.v);
}
innerLog();
}
var pro = new Program();
pro.logV(); // 1
```
若希望打印出Program的this.v 即3, 有三种处理方法:
方法一:
```
Program.prototype.logV = function () {
var instance = this;
function innerLog () {
console.log(instance.v);
}
innerLog();
}
```
方法二:
```
Program.prototype.logV = function () {
function innerLog () {
console.log(this.v);
}
this.innerLog = innerLog;
this.innerLog();
}
```
方法三:
```
Program.prototype.logV = function () {
function innerLog (v) {
console.log(v);
}
innerLog(this.v);
}
```
#### 对象的属性不可以继承
属性不可以继承指的是,如果对象有多个层次,那么父子对象里的属性不可以相互继承和调用。
代码示例:
```
function logV() {
console.log(this.v);
}
var obj = {v: 1};
obj.sonObj = {};
obj.logV = logV;
obj.sonObj.logV = logV;
obj.logV(); // 1
obj.sonObj.logV(); // undefined
```
之所以为undefined, 也是this的一种应用,此时obj.sonObj并没有定义属性v且没有继承ovj的v,所以打印其结果为undefined.