js函数

js中使用prototype来实现方法的原因

1、在js中实现方法

function one(){
	//方法内容
}

可以如此实现,只不过如此实现的方法,相当于创建了一个新的全局变量。
等同于:

var one = function(){
	//方法内容
}

如何使自己的方法不声明为全局变量呢?
我们需要将方法保存在对象中,只暴露出全局对象,隐藏对象的方法。

var oneObj = {
	one:function(){
		//方法内容
	}
}
//使用方法
oneObj.one();

因为在JavaScript中,函数也是对象。所以我们可以这样写:

var oneObj = function(){};
oneObj.one = function(){
	//方法内容
}

上面的内容实现了,方法在不暴露为全局变量,但是当别人使用你的方法时,或者别人像拷贝出一份你的对象,使用你的方法时,是不可以的。因为新对象是不能继承这些方法的。
复制的作用:你买了一本书,你的小伙伴想要,如果你有一台打印机,你就可以打印给你的小伙伴

如果是指向单单的复制,可以将方法放在一个函数对象中:

var oneObj = function(){
	return {
		one:function(){
			//实现内容
		}
	}
};

当每次调用函数时,就会返回一个新的对象,我们写的方法就在对象中。
我们虽然完成了简单的返回,但这不是我们想要的类,因为创造出的对象和oneObj没有任何关系,需要改造下:

var oneObj = function(){	
	this.one = function(){
			//实现内容
	}	
};

上面的对象就可以看做是个类,可以使用new关键字进行创建。

但是存在一个问题,如果创建多个oneObj,新创建的对象都会对类的this上的属性进行复制,所以这些新创建的对象都有一套属于自己的方法。有是有这么做会造成很大的消耗。我们需要继续优化

var oneObj = function(){};
oneObj.prototype.one = function(){
	//方法内容
}
oneObj.prototype.two = function(){
	//方法内容
}

/***********************上述的方法也可以写作*******************/
var oneObj =  function(){};
oneObj.prototype = {
	one:function(){
		//实现内容
	},
	two:function(){
		//实现内容
	},
}

这样创建对象实例的时候,创建出来的对象拥有的方法就都是一个了,因为他们都需要依赖prototype原型依次寻找,而找到的方法都是同一个,他们都绑定在oneObj对象类的原型上。
注意:上述的两种对prototype赋值的方法不能混用

如果我们使用的话

var oj = new oneObj()
oj.two();
oj.one();

我们调用两个方法,对象写了两遍,该如何使用链式调用呢?就需要在每个方法的结尾将当前的对象进行返回。在JavaScript中this的指向就是当前对象。所以可以将this返回

var oneObj =  function(){};
oneObj.prototype = {
	one:function(){
		//实现内容
		return this;
	},
	two:function(){
		//实现内容
		return this;
	},
}
//在使用的时候我们就可以链式调用
var oj = new oneObj();
oj.one().two();

函数的祖先
prototype.js是一款js的框架,可以看看
如果想给每一个函数都添加一个方法:

Function.prototype.one = function(){
	//
}

//如果习惯函数的形式
var f = funtion(){};
f.one();
//如果习惯类的形式
var f = new Function();
f.one();


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值