您的位置:首页 > Web前端 > JavaScript

JavaScript的原型链学习研究

2016-07-26 22:45 561 查看
今天在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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: