JavaScript面向对象
文章分类:Web前端
①JavaScript一切都派生于现有对象的一个副本,即对象赋值跟另一个对象,只是复制对象的副本,并不是指针引用,两者之间的属性值改变,并不相互影响
②对象=关联数组=属性包=存储体,即键/值形式,<属性名/属性值>或<函数名/函数动作>等
③原型中读取的时候从原型链上读取,写入的时候往自己里面写,即读取的时候先从自身查找,没有则从上层父类查找,直至顶层Object对象,而写入则只是写在自身之中
实例解析:
<script>
/*对象赋值,只是复制对象的副本,两者之间的属性值的改变并不相互影响*/
var person={};
person.name="person";
var student={};
student.name=person.name;
person.name="hzp";
alert(person.name); //打印hzp
alert(student.name);//打印person
/*********类的继承********/
function Person(){
this.name="person";
this.getName=function(){
alert(this.name);
}
}
function Student(){
}
Student.prototype=new Person(); //继承Person
function init(){
var s1=new Student();
s1.getName();//打印person
alert(s1.age);//原型中读的时候从原型链上读,先从Student自身找age,没有就从上层父类Person找,直至顶层父类Object,最终没有找到,打印undefined
Person.prototype.age=22;
var s2=new Student();
s2.name="hzp";
s2.getName();
alert(s2.age); //原型中读的时候从原型链上读,先从Student自身找age,没有就从上层父类Person找,结果找到了age
}
init();
/***原型中读的时候从原型链上读,写的时候往自己里面写****/
function object2(){
}
function object3(){
}
var obj3=new object2();
Object.prototype.foo=function(){
alert("object");
}
obj3.foo(); //读的是Object里的foo
object2.prototype.foo=function(){
alert("object2");
}
obj3.foo();//读的是object2里的foo
</script>
②对象=关联数组=属性包=存储体,即键/值形式,<属性名/属性值>或<函数名/函数动作>等
③原型中读取的时候从原型链上读取,写入的时候往自己里面写,即读取的时候先从自身查找,没有则从上层父类查找,直至顶层Object对象,而写入则只是写在自身之中
实例解析:
<script>
/*对象赋值,只是复制对象的副本,两者之间的属性值的改变并不相互影响*/
var person={};
person.name="person";
var student={};
student.name=person.name;
person.name="hzp";
alert(person.name); //打印hzp
alert(student.name);//打印person
/*********类的继承********/
function Person(){
this.name="person";
this.getName=function(){
alert(this.name);
}
}
function Student(){
}
Student.prototype=new Person(); //继承Person
function init(){
var s1=new Student();
s1.getName();//打印person
alert(s1.age);//原型中读的时候从原型链上读,先从Student自身找age,没有就从上层父类Person找,直至顶层父类Object,最终没有找到,打印undefined
Person.prototype.age=22;
var s2=new Student();
s2.name="hzp";
s2.getName();
alert(s2.age); //原型中读的时候从原型链上读,先从Student自身找age,没有就从上层父类Person找,结果找到了age
}
init();
/***原型中读的时候从原型链上读,写的时候往自己里面写****/
function object2(){
}
function object3(){
}
var obj3=new object2();
Object.prototype.foo=function(){
alert("object");
}
obj3.foo(); //读的是Object里的foo
object2.prototype.foo=function(){
alert("object2");
}
obj3.foo();//读的是object2里的foo
</script>