JavaScript对象基础

2019-12-15  本文已影响0人  whisper330

对象是什么

对象是一个包含相关数据和方法的集合,通常由一些变量和函数组成,我们称之为对象里面的属性和方法。

面向对象的编程可以理解为,把一切看做成东西,这个东西有他自己的属性和功能。

怎么创建对象

常见的创建方法有以下几种。

1.Object构造函数创建
var obj = new Object();
obj.member1Name = member1Value;
obj.member2Name = member2Value;
obj.member3Name = member3Value;
//用Object引用类型创建一个新实例,然后保存在obj中
2.对象字面量表示法
var obj= {
  member1Name : member1Value,
  member2Name : member2Value,
  member3Name : member3Value
}
3.用构造函数创建对象
function obj(arguments) {
  this.member1Name = member1Value;
  this.member2Name = member2Value;
  this.member3Name = member3Value;
}
4.工厂模式创建
function myfun(arguments) {
  var obj = new Object();
  obj.member1Name = member1Value;
  obj.member2Name = member2Value;
  obj.member3Name = member3Value;
  return obj;
}
var obj1 = myfun(arguments);

怎么访问对象

obj.member1Name
obj.member1Name[1]
obj.member1Name()
obj[“member1Name”]
obj[”member1Name”][”submember1Name”]
obj = {};
for (var i = 0; i < 4; i++) {
  obj["name"+i] = i;
}
console.log(obj); //=>
{name0: 0, name1: 1, name2: 2, name3: 3}

    2.可以通过变量来进行访问。

var propertyName = 'member1Name';
console.log(obj[member1Name]);  

对象中的this

this可以理解为一个指针,它的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁。

实际上this的最终指向的是那个调用它的对象,更精确的说,this永远指向的是最后调用它的对象

接下来我们从三种调用方式分别来阐述this在该情况下的指向。
1.作为对象来调用:this被绑定到该对象

var point = {
x : 0,
y : 0,
moveTo : function(x, y) {
    this.x = this.x + x;
    this.y = this.y + y;
    }
};
point.moveTo(1, 1)//this 绑定到当前对象,即 point 对象

2.作为函数来调用:函数被直接调用绑定到全局对象

function makeNoSense(x) {
this.x = x;
}
makeNoSense(5); //=>这里等效为 window.makeNoSense(5);
x;// x 已经成为一个值为 5 的全局变量

对于内部函数,即声明在另外一个个函数体内的函数,也会绑定到全局。

var point = {
x : 0,
y : 0,
moveTo : function(x, y) {
    // 内部函数
   var moveX = function(x) {
   this.x = x;//this绑定到了全局
   };
   // 内部函数
   var moveY = function(y) {
   this.y = y;//this 绑定到了全局
   console.log(this); //=>window
   };
   console.log(this);
   moveX(x);
   moveY(y);
   }
};
point.moveTo(1, 1);
point.x; //==>0
point.y; //==>0
x; //==>1
y; //==>1

如果我们其实是想把point里面的x,y改变,可以这么做:

var point = {
x : 0,
y : 0,
moveTo : function(x, y) {
     var that = this; //=>用变量把this保存起来
    // 内部函数
    var moveX = function(x) {
    that.x = x;
    };
    // 内部函数
    var moveY = function(y) {
    that.y = y;
    }
    moveX(x);
    moveY(y);
    }
};
point.moveTo(1, 1);
point.x; //==>1
point.y; //==>1

3.作为构造函数调用: 构造函数中的this指向新创建的对象本身

function showName() {
 this.name = "showName function"; 
} 
var obj = new showName(); 
console.log(obj.name); //showName function

上述代码中,我们通过new关键字创建一个对象的实例,new关键字可以改变this的指向,将这个this指向对象obj。

上一篇下一篇

猜你喜欢

热点阅读