JavaScript的原型的特殊点

JavaScript中的原型

每个创建的函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,这个对象包含所有该函数指定的类型的共享属性和方法。

function Person(){
}
Person.prototype = {
	name : "Gul’dan"
	age : 18,
	sayHello : function(){
		alert("Hi!");
	}
};
var test = new Person();
test.sayHello();// Hi!
alert(test.name);// "Gul’dan"

实例向name中添加不同的名字会覆盖原型属性的名字。

alert(test.name);// "Gul’dan"
test.name = "Anduin Llane Wrynn";
alert(test.name);// "Anduin Llane Wrynn"

原型的动态性

先创建实例再创建原型不影响实例调用原型的属性和方法。

var test2 = new Person();
Person.prototype.sayBye = function(){
	alert("Bye");
}
test2.sayBye();// "Bye"

原型属性不能包含引用类型值

当原型属性中有引用类型值时,就不能像上文重新赋值name那样了。一个实例改变了带有引用类型的属性时,所有实例的该属性都会变化。想要解决这个问题只要利用构造函数模式和原型模式结合使用就好了。

function Person(name,age){
	this.name = name;
	this,age = age;
	this.friends = ["Shelby","Tommi"]
}
Person.prototype = {
	constructor : Person,
	game : "World of Warcraft"
	sayName : function(){
		alert(this.name);
	}
}
var p1 = new Person("Gul’dan", 109);
var p2 = new Person("Anduin", 18);
p1.friends.push("Van");
alert(p1.friends);// "Shelby,Tommi,Van"
alert(p2.friends);// "Shelby,Tommi"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值