javascript - 方法直接封装在对象中和通过prototype封装有什么区别
PHPz
PHPz 2017-04-11 11:48:37
[JavaScript讨论组]

问题一:

一个方法封装在一个对象中时,直接封装和通过prototype封装两种方法有什么区别?

var Apple = {};
Apple.prototype.size = function size() {
    // do something
};
Apple.size = function size() {
    // do something
};
var app1 = new Apple();
var app2 = new Apple();

关于prototype,我的印象是好像和原型的动态性、prototype的方法时公用的什么的有关系,一旦app1的size改动会影响到app2的size。
但是在我目前接触的项目中,大概是这样的

var City = function city(node) {
    this.node = document.querySelector(node);
    this.size = null;
    ……
    ……
    this.location = {};
};
City.prototype.a = function a() {};
City.prototype.b = function b() {};
City.prototype.c = function c() {};

City.x = function x() {
    // do something
}

问题二:
这里不涉及对实例的改动,但是为什么最后的x方法不用原型而要直接这样写(哈哈,这种写法叫什么?赋值?)呢?

PHPz
PHPz

学习是最好的投资!

全部回复(1)
高洛峰

问题一:

直接封装会造成内存浪费,每次new都会开辟新的内存。而通过prototype则没有这个问题,因为都是引用。


问题二:

这种写法相当于静态方法,就是无需new即可进行调用。例如Math对象的方法都是这样。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号