一、对象冒充
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<script>
function Person(name, age) {
this.name = name;
this.age = age;
this.show = function () {
document.getElementById("target1").innerHTML = "name:" + this.name + "<br>age:" + this.age+"<br>";
}
}
var p = new Person("小学森", 12);
p.show();
function Student(name, age, score) {
// this.newMethod = Person;
//this.newMethod(name, age);
//delete newMethod;
this.score = score;
this.show = function () {
document.getElementById("target2").innerHTML = "name:" + this.name + "<br>age:" + this.age + "<br>score:" + this.score + "<br>";
}
}
var stu = new Student("小学森", 12, 100);
stu.show();
</script>
</body>
</html>
二、call() 与 apply()
1.call()
将以上代码注释部分替换为:
Person.call(this, name, age);
call()方法的第一个参数用作this的对象,其他参数与函数对应
2.apply()
将以上代码注释部分替换为
Person.apply(this, new Array(name, age));
第一个参数为this,第二个参数为要传递给函数的参数数组。
三、原型链
function ClassA() {
}
ClassA.prototype.color = "red";
ClassA.prototype.sayColor = function () {
alert(this.color);
}
function ClassB() {
}
ClassB.prototype = new ClassA();
ClassB.prototype.name = "";
ClassB.prototype.sayName = function () {
alert(this.name);
}
var objA = new ClassA();
var objB = new ClassB();
objA.color = "yellow";
objB.color = "blue";
objB.name = "xx";
objA.sayColor();
objB.sayColor();
objB.sayName();
四、混合方式
function ClassA(sColor) {
this.color = sColor;
}
ClassA.prototype.sayColor = function () {
alert(this.color);
}
function ClassB(sColor, sName) {
ClassA.call(this, sColor);
this.name = sName;
}
ClassB.prototype = new ClassA();
ClassB.prototype.sayName = function () {
alert(this.name);
}
var objA = new ClassA("red");
var objB = new ClassB("yellow", "admin");
objA.sayColor();
objB.sayColor();
objB.sayName();