JavaScript 05 对象 ,this,工厂方法,自定义构造函数,new的执行过程,遍历对象的属性

一个月没有更新了,一直在弄毕业论文和毕设,刚刚告一段落……

对象:对象是一个具体的事物,不是一类。不同属性中间用 逗号 隔开

对象是无序属性的集合,属性的值可以是基本值,对象和函数。

对象由特征(描述对象的,属性,名词)和行为(动词)组成

var student = {

  name : "张飞";

  age : 12;

  sayHi : function () {

    console.log("hello");

  }

};

在对象方法中如何使用对象属性的值?>>>>this,表示当前对象

var dog = {

  name: "puppy",

  type: "中华田园犬",

  age: 12,

  color: "yellow",

  bark: function () {

    console.log(this.name + "wangwangwang");

  },

  eat: function () {

    console.log("啃骨头");

  }

};

dog.bark();     //调用对象的方法

console.log(dog.name);    //调用对象的属性

另一种方式访问对象中的元素:

console.log(dog["name"]);    //[ ] 内填写键名

函数和方法的区别:

函数可以随时调用,方法是属于对象的函数,调用必须通过 对象.方法名() 来调用

对象创建方法:1 字面量

var = hero{

  name:\'黄忠\',

  weapon: \'弓箭\';

  equipment:[\'头盔\', \'靴子\', \'盔甲\'],

  blood:100,

  attack: function () {

    console.log(this.name + \'射箭\');

  },

  run: function () {

    console.log(this.name + \': 加速跑\');

  },

};

  2 new Object()创建对象

Object是构造函数,通过new的方式来调用构造函数       //函数第一个字母大写是构造函数。构造函数只能通过new来调用,在内存中创建一个对象

var hero = new Object();  //创建一个空的对象

JavaScript可以动态增加属性

hero.name = \'黄忠\';

hero.age = 12;

hero.weapon = \'弓箭\';

hero.equipment = [\'头盔\', \'靴子\', \'盔甲\'];

hero.blood = 100;

//增加方法

hero.attack = function () {console.log(this.name + \'射箭\');};

  3工厂方法创建对象:

function createHero (name, weapon, equipment, blood) {

  var hero = new Object();

  hero.name = name;

  hero.weapon = weapon;

  hero.equipment = equipment;

  hero.blood = blood;

  hero.attack = function () { console.log(this.name + \'攻击\' ); };

};

var hero1 = createHero(\'黄忠\',‘弓箭’,[‘头盔’,\'靴子\'], 100);

var hero2 = createHero(\'刘备\',‘剑’,[‘头盔’,\'靴子\'], 90);

  4 自定义构造函数,第一个字母大写(帕斯卡命名法)

function Hero(name, weapon, equipment, blood){

  this.name = name;   //this指的是当前对象,也就是实例化之后的对象

  this.weapon = weapon;

  this.equipment = equipment;

  this.blood = blood;

  this.attack = function (){console.log(this.name + \':攻击\')};

};

var hero1 = new Hero(\'黄忠\', \'弓箭\', [\'头盔\', \'靴子\'], 100);

new的执行过程

function Student(name,age,sex,score) {

  this.name = name;

  this.age = age;

  this.sex = sex;

  this.score = score;

  this.sayHi = function () {console.log(this.name +" hello");}

};

student = new Student(\'lilei\', 12,\'nv\',60);

new的执行过程:

1 在内存中创建一个空的对象

2 让构造函数中的this指向刚刚创建的对象

3 执行构造函数,在构造函数中设置属性和方法(也可其他)

4 返回当前对象

this出现的地方:

1 函数中 function fn(){console.log(this)};    //this指向window

2 方法中   //指向这个方法所属的对象

3 构造函数中  //指向构造函数创建的对象

遍历对象的属性

for in 可以遍历对象的成员

var student = {name:\'lili\', age: 12, sex: \'nv\', attack: function(){console.log(1111);}};

for (var key in student) { console.log(key + \'-----\'+student[key]); };     //遍历出所有的属性,包括函数名 和其内容

删除对象属性: delete student.name; console.log(student.name);    //输出undefined 。方法也这样删除