`

JavaScript面向对象

阅读更多
①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>
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics