发表于: 2017-02-06 22:00:58

3 1256


一、今天完成的事情:

学习对象,复习引用类型和基本类型,巩固以前的知识。


二、明天要做的事情:

js任务还有一点没有做完,明天把它给完成了


继续看红宝书,巩固一下基础知识


准备开始萝卜多了,不能拖了


三、遇到的问题:

1.基本类型:number、string、布尔、null、undefined,它们的值只要保存了一次,只要不改变它本身,就不会再改变了,举个例子:

var a = 1;
var b = a;
a = 2;
alert(b); // b=1

2.引用类型:对象、数组、函数,它们之间的关系,它们之中存在的是指针,指向的一个位置,你改变了它们任意一个,就会改变该位置上的原来的东西,这样就会直接导致整个值的改变:

var a = [1,2,3];
var b = a;
alert (b[0])    // 1
a[0] = 2;      
alert (b[0]);   // 2

这里我发现一个问题:我把a改为 a =[2,2,3]之后下面还是会alert出来的是1,为什么呢??


3.创建对象的问题:我的理解是,写在构造函数里的是可以改变的属性,写在原型里的是大家共享的不能改变的属性,举个例子:

function Person(age,name,job) {
   this.age = age;
   this.name = name;
   this.job = job
}
Person.prototype = {
   constractor : persno,
   sayName : function () {
       alert (this.name)
   }
}

person1 = new Person(18,'frank','boss')
person1.sayName()   //frank

但是需要注意的是,我们在要使用原型链继承的时候不能写成上面这种字面量格式,需要怎么写呢?需要这样写:

function Person(age,name,job) {
   this.age = age;
   this.name = name;
   this.job = job
}

Person.prototype.constructor = Person;
person.prototype.sayName = function () {
   alert(this.name);
};

person1 = new Person(18,'frank','boss');
person1.sayName();   //frank

接下来继承之中我们应该怎样写呢?怎么才能继承呢?就是这样写啦:

function Person(age,name,job) {
   this.age = age;
   this.name = name;
   this.job = job;
   this.friend = ['bob','mike','lina']
}

Person.prototype.constructor = Person;
Person.prototype.sayName = function () {
   alert(this.name);
};

//call方法来继承上面的friend里的东西
function AnoterPerson(age,name,job) {
   Person.call(this,age,name,job)
}

//继承
AnoterPerson.prototype = new Person();
AnoterPerson.prototype.constructor = AnoterPerson;

var person2 = new AnoterPerson(20,'frank','student');
console.log(person2.friend);    //["bob", "mike", "lina"]
console.log(person2);


总结:这里需要注意的是我使用了call方法来继承friend,这样他在下面随意修改也不会影响到继承的朋友们啦,这种继承方法叫借用构造函数继承。这种构造方法总的被称为组合继承!


返回列表 返回列表
评论

    分享到