对象的创建
使用Object()构造函数或者对面字向量来创建对象
var LY1 = {
name: "LY",
age: 21,
sayname: function() {
alert(this.name);
}
};
LY1.sayname();//使用对象字面量创建对象
var LY2 = new Object();
LY2.name = "LY";
LY2.age = 21;
LY2.sayname = function() {
alert(this.name);
}
LY2.sayname();//使用Object()构造函创建对象
构造函数模式和原型模式
function LY1(name, age) {
this.name = name;
this.age = age;
this.sayname = function() {
alert(this.name);
};
}
var ly1 = new LY1("LY1", 21);
var ly11 = new LY1("LY11", 21); //使用构造函数的方法创建对象
function LY2() {}
LY.prototype.name = "LY2";
LY.prototype.age = 21;
LY.prototype.sayname = function() {
alert(this.name);
}
var ly2 = new LY2();
var ly22 = new LY2(); //使用原型模式构造对象
组合使用构造函数模式和原型模式
function LY(name, age) {
this.name = name;
this.age = age;
}
LY.prototype = {
constructor: LY,
sayName: function() {
alert(this.name);
}
};
var ly1 = new LY();
var ly2= new LY();
这样创建的两个对象就既有共享属性又有自己独立的属性动态原型模式
function LY(name, age) {
this.name = name;
this.age = age;
if (typeof this.sayName != "function") {
LY.prototype.sayName = function() {
alert(this.name);
};
}
}
继承
原型链
function Child() {
this.name = "LY";
}
function Parent() {
this.age = 21;
}
Parent.prototype.getAge = function() {
alert(age);
}
Child.prototype = new Parent();
Child.prototype.getName = function() {
alert(this.name);
};
var child = new Child();
将Parent类型的实例赋值给Child类型的原型,赋值之后Child类型的实例child继承了Parent()的属性,接着又向Child类型的原型添加了getName()方法借用构造函数
function Parent() {
this.age = 21;
}
function Child() {
Parent.call(this);
}
Child.prototype = new Parent();
var child1 = new Child();
var child2 = new Child();
这样在创建child1和child2是就会分别创建Parent()的实例,在修改child1时就不会对child2产生影响组合继承
function Parent() {
this.age = 21;
}
function Child() {
this.name = "LY";
Parent.call(this);
}
Child.prototype = new Parent();
var child1 = new Child();
var child2 = new Child();
在上面的代码中,借用call()函数使得Child()函数获得Parent()函数中的属性。使用原型链获得Parent原型中的方法组合继承是JavaScript中使用较多的继承方式