js中类定义函数时用prototype与不用的区别
转载自:https://blog.csdn.net/yexudengzhidao/article/details/72866047
先看例子
function ListCommon2(first,second,third)
{
this.First=function ()
{
alert("first do"+first);
}
}
//不加prototype的情况
ListCommon2.do1=function(first)
{
// this.First();
alert("first do"+first);
}
//添加prototype的情况
ListCommon2.prototype.do2=function(first)
{
// this.First();
alert("first do"+first);
}
上面添加与不添加prototype有什么区别呢?下面我们来测试这个实例。代码如下
var t1=new ListCommon2("烧水1","泡茶1","喝1");
// t1.do1();//调用出错
ListCommon2.do1("烧水1");
var t2=new ListCommon2("烧水2","泡茶2","喝2");
t2.do2("烧水2");//
// ListCommon2.do2("烧水1");//调用出错 
经过测试发现,没有使用prototype的方法相当于类的静态方法,因此可以这样调用,ListCommon2.do1(“烧水1”);但如果这样调用就会出错,t1.do1();
相反,使用prototype的方法相当于类的实例方法,不许new后才能使用,ListCommon2.do2(“烧水1”);这样就会出错
结论:
- 使用 prototype定义的方法相当于类的实例方法,必须new后才能使用
 - 不使用prototype定义的方法相当于类的静态方法,可以直接使用,不需要new
 
js中类定义函数时用prototype与不用的区别的更多相关文章
- js面向对象编程: js类定义函数时prototype和this差别?
		
在面向对象编写js脚本时,定义实例方法主要有两种 例如以下: function ListCommon2(afirst) { var first=afirst; this.do1=function () ...
 - js面向对象编程: js类定义函数时prototype和this区别?
		
参考文章的链接:http://www.2cto.com/kf/201406/307790.html 测试代码如下: function ListCommon2(afirst) { var first=a ...
 - js function定义函数的4种方法
		
js function定义函数的4种方法 1.最基本的作为一个本本分分的函数声明使用. 复制代码代码如下: 复制代码代码如下: function func(){} 或 var func=functio ...
 - python定义函数时的默认返回值
		
python定义函数时,一般都会有指定返回值,如果没有显式指定返回值,那么python就会默认返回值为None, 即隐式返回语句: return None 执行如下代码 def now(): prin ...
 - python定义函数时默认参数注意事项
		
如果在调用一个函数时,没有传递默认参数,则函数内的默认参数是对函数的默认参数属性__defaults__的引用, 如 def func(arg1=[]): arg1.append(2) 调用func时 ...
 - python定义函数时的参数&调用函数时的传参
		
一.定义函数: 1.位置参数:直接定义参数 2.默认参数(或者关键字参数):参数名 = "默认值" 3.位置参数必须在默认参数之前 二.调用函数: 1.按位置传,直接写参数的值 2 ...
 - js 如何定义函数
		
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
 - Python中定义函数时参数有默认值的小陷阱
		
在定义函数的时候,如果函数的参数有默认值,有两种类型的参数,一种是整数,字符串这种不可变类型,另一种是列表这种可变类型,对于第一种情况没有什么特殊的地方,但是对于可变类型,有一个微妙的小陷阱. 可变类 ...
 - javascript之定义函数时 this 和prototype区别
		
注:原文 http://www.2cto.com/kf/201406/307790.html 这里作为学习,写在这里 在面向对象的方式编写js脚本时,定义实例的方法主要有两种:this.XXX = f ...
 
随机推荐
- Linux登录失败:Too many logins for 'username'.
			
cat /etc/security/limits.conf #<domain> <type> <item> <value> * - maxlogins ...
 - aiojobs
			
import asyncio import aiojobs async def coro(timeout): print(timeout) await asyncio.sleep(timeout) p ...
 - linux系统网络相关问题
			
暂时将你的 eth0 这张网络卡的 IP 设定为 192.168.1.100 ,如何进行? ifconfig eth0 192.168.1.100 我要增加一个路由规则,以 eth0 连接 192.1 ...
 - 【转】判断处理器是Big_endian的还是Little_endian的
			
首先说明一下Little_endian和Big_endian是怎么回事. Little_endian模式的CPU对操作数的存放方式是从低字节到高字节,而Big_endian模式则是从高字节到低字节,比 ...
 - C#委托delegate、Action、Func、predicate 对比用法
			
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 一.委托的声明 (1) delegate delegate我们常用到的一种声明 Delega ...
 - where 和 having区别
			
WHERE语句在GROUP BY语句之前:SQL会在分组之前计算WHERE语句. HAVING语句在GROUP BY语句之后:SQL会在分组之后计算HAVING语句.
 - python的assert关键字用法
 - 安装fastDFS的依赖包fdfs_client报错解决方法
			
输入以下指令后再尝试安装 python3环境下输入: sudo apt-get install python3 python-dev python3-dev build-essential libss ...
 - 后台调用前台js方法
			
后台调用前台jsClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript", "<s ...
 - Struts2,springMVC获取request和response
			
springMVC获取request和response1:在BaseController中加入: protected HttpServletRequest request; protected H ...