发表于: 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,这样他在下面随意修改也不会影响到继承的朋友们啦,这种继承方法叫借用构造函数继承。这种构造方法总的被称为组合继承!
评论