VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2434|回复: 11

prototype到底是什么?为什么要用prototype?--新手问...

[复制链接]

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-1-18 22:40:02 | 显示全部楼层 |阅读模式
function Car()
{}
Car.prototype.color="red";
Car.prototype.doors=4;
Car.prototype.mpg=23;
Car.prototype.showColor=function()
{
    alert(this.color);
};
var oCar1=new Car();
var oCar2=new Car();


我的问题是:
这里为什么要用prototype?
为什么不能直接写成这样:
function Car()
{}
Car.color="red";
Car.doors=4;
Car.mpg=23;
Car.showColor=function()
{
    alert(this.color);
};
var oCar1=new Car();
var oCar2=new Car();

还有就是为什么prototype要写在函数体外面?
写在里面有什么问题?
function Car()
{
Car.prototype.color="red";
Car.prototype.doors=4;
Car.prototype.mpg=23;
Car.prototype.showColor=function()
{
    alert(this.color);
};
}

回复

使用道具 举报

0

主题

5

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-1-25 21:45:02 | 显示全部楼层
把 prototype 当函数用就行了.
写 js 一般是写函数, 但某些功能直接写 prototype 复用性高.
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-1-26 08:09:01 | 显示全部楼层
我就是觉得很难理解它,你说把它当作函数,可是它并不像函数...
所以对于新手的我,真的“卡住”了在这里

所以大家能不能更深入的讲解一下?
谢谢了!!!
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-26 14:54:01 | 显示全部楼层
它是用Javascript写好的一些API,包括对Javascript中的类如String,Array等进行的扩充,把JS文件嵌入后直接用就行了,如果程序看不明白的话,建议你参考一下JSON,上网上查一下,有很多这样的文章,prototype就用了JSON的语法。
回复

使用道具 举报

0

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-1-26 22:54:02 | 显示全部楼层
大概就像书上写的那样,可以有效节省空间;不然多建几个对象,有些不必要的方法和数据会被重复创建~我是这么理解的
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-30 03:54:01 | 显示全部楼层
bear4ever 说的prototype和楼主说的不是一回事,bear4ever 说的prototype是一个JS框架。prototype是用于对原型对象的继承,主要是为了节省内存空间。
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-3-3 22:30:02 | 显示全部楼层
mark
回复

使用道具 举报

0

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-3-12 23:00:01 | 显示全部楼层
原先有人问过,然后又有前辈答说内存分布方式不同。。。。
地址找不到了(很不好找的说,所以就不找了^o^)
回复

使用道具 举报

0

主题

6

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-3-19 09:30:02 | 显示全部楼层
类和实现的关系类似于:模具和成品的关系。而 prototype 就是对模具的细节雕刻,刻上什么,那从这个模具里浇铸出来的成品就会有什么。
Car.doors=4; 这样的写法只是对 Car 这个对象扩展一些静态成员,不会被实例继承的
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-4-10 11:15:01 | 显示全部楼层
Car.doors=4; 这样的写法只是对 Car 这个对象扩展一些静态成员,不会被实例继承的


谢谢7660367
你这样说就清晰了很多了~~~

不过还有问题
为什么prototype要写在函数体外面?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表