今天在CSDN上看到这么一段代码,感觉有需要学习的东西,在此总给一下。
分析一下:
创建了一个fun类,写了name和age属性。然后new 一个实体a和b,打印a和b的name属性,断开原型链之后,修改属性值无效,即变成引用。
代码如下:
/**
* Created by simon.zhang on 2016/7/26.
*/
var fun=function () {};
fun.prototype={
name:"peter",
age:25
};
var a=new fun();//new a
var b=new fun();//new b
console.log(a.name,b.name);//peter peter
fun.prototype.name="simon";
console.log(a.name,b.name);//simon simon
//----------------
fun.prototype={};//原型链断开,所有的实例,马上会变成引用(即修改原型的属性值,其值不会改变)
console.log(a.name,b.name);//simon simon,a和b引用的还是原来的对象
fun.prototype.name="mary";//重建原型链
var d=new fun();
console.log(d.name);//mary,打印新的name
console.log(a.name,b.name);//simon simon,a和b引用的还是原来的对象
fun.constructor.prototype.name="jack";//并不能修改原型的属性值
console.log(d.name);//mary
console.log(a.name,b.name);//simon simon,a和b引用的还是原来的对象
//----------------
fun.prototype.name="mary";
fun.prototype.age="24";
var c=new fun();
console.log(c.name,c.age);//mary 24
JavaScript的面向对象Demo代码
/**
* Created by simon.zhang on 2016/7/26.
*/
var Person=function () {
};
Person.prototype={
name:"defaultName",
age:0,
toString:function () {
console.log(this.name,this.age);
}
};
Person.prototype.name="p1";
var p1=new Person();
p1.toString();
Person.prototype.name="p2";
var p2=new Person();
p2.toString();
console.log("----------------------------------");
function P(firstname,lastname)
{
this.firstname=firstname;
this.lastname=lastname;
this.toString=function () {
console.log(this.firstname,this.lastname);
}
}
person=new P("Bill2","Gates");
person.toString();