javascript 高级——prototyp对象(中)原型的符合构造方式

前面说过,java的属性是每个对象都会拷贝一份,但是方法确实共享的,这样就大大的节约了空间

js怎样实现这样的方式呢,

我们将属性在构造函数中定义,将方法在原型中定义:

function Person(name,age,friends){
	 	this.name = name;
		this.age = age;
		this.friends = friends;
	 }
     Person.prototype.say = function(){
	 	alert(this.name +":"+this.age+"-->friend:"+this.friends.join(","));
	 }
	 var p1 = new Person("张三",23, ["王五","赵六"]);
	 p1.say();

结果:张三:23-->friend:王五,赵六

如果此时再对单个对象进行push操作就不会改变原型中的值了,也就不会影响其他的对象

 function Person(name,age,friends){
	 	this.name = name;
		this.age = age;
		this.friends = friends;
	 }
     Person.prototype.say = function(){
	 	alert(this.name +":"+this.age+"-->friend:"+this.friends.join(","));
	 }
	 var p1 = new Person("张三",23, ["王五","赵六"]);
	 var p2 = new Person("张三",23, ["王五","赵六"]);
	 p1.say();
	 p1.friends.push("沈器");
	 p1.say();
	 p2.say();

结果:

张三:23-->friend:王五,赵六

张三:23-->friend:王五,赵六,沈器   

张三:23-->friend:王五,赵六

还要注意原型重写与原型定义的先后顺序

    function Person(name,age,friends){
	 	this.name = name;
		this.age = age;
		this.friends = friends;
	 }
	 Person.prototype = {        //千万要注意  =  是重写原型,注意不要覆盖以前指定的
	 	want:function(){
			alert("live:"+ this.friends[1]);
		}						//方法
	 	
	 }
     Person.prototype.say = function(){
	 	alert(this.name +":"+this.age+"-->friend:"+this.friends.join(","));
	 }


动态原型:

java中属性和方法都是放在类中的,javascript如果向这方面靠近的话,怎么办呢

 function Person(name,age,friends){
	 	this.name = name;
		this.age = age;
		this.friends = friends;
		 Person.prototype = {        //千万要注意  =  是重写原型,注意不要覆盖以前指定的
	 		want:function(){
			alert("live:"+ this.friends[1]);
			}						//方法	 	
		}
	 }


如果用这种方法的话,在重写以前对原型定义的属性和方法都会消失,因此可能出现问题,当然不推荐这种方法。

function Person(name,age,friends){
	 	this.name = name;
		this.age = age;
		this.friends = friends;
		if(!Person.prototype.say){
			Person.prototype.say = function(){
				alert("good");
			}
		}
	 }

这样在创建对象的时候方法就仅仅会创建一次在原型中。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值