//code 1:
var Dog = (function () {
var age = 0; return {
getAge: function () {
return age++;
}
};
}());console.log(Dog.getAge());
console.log(Dog.getAge());/***************************************/分界线
//code 2:
function Dog()
{
var age = 0 ; this.getAge = function()
{
return ++age;
};
}var d = new Dog();
console.log(d.getAge());
console.log(d.getAge());请问这两种实现有什么区别,用起来差不多
var Dog = (function () {
var age = 0; return {
getAge: function () {
return age++;
}
};
}());console.log(Dog.getAge());
console.log(Dog.getAge());/***************************************/分界线
//code 2:
function Dog()
{
var age = 0 ; this.getAge = function()
{
return ++age;
};
}var d = new Dog();
console.log(d.getAge());
console.log(d.getAge());请问这两种实现有什么区别,用起来差不多
解决方案 »
- 问一个关于C++lambda表达式的问题
- 求解释
- 请问 javascript配合php能否把js修改后的临时html保存到新html文件?
- js没有权限 的异常。。求解决办法!!!
- 请教一个问题
- 急~~~~~~~javascript能直接验证 声音与视频的大小吗?
- 哪有类似于软件导航菜单的JS效果?
- 我在国外的服务器上申请了一个免费的主页空间,上传主页后。每次浏览主页时默认的编码方式都是(西欧Window),这样我的主页中文无法显示,
- 学习JS视频教程 那些代码都能用的上吗?
- js fetch promise对象 想返回成json对象 但是返回的是promise对象
- jpreloader问题
- 菜鸟学JQuery,代码运行出来的结果是点击按钮隐藏的层不显示
2,Dog的实例对象,可能还可以继承prototype什么的
第一种相当于封装了一个计数器:i一直增长。
第二种的i是对于每个对象是唯一的,你再来个dog2,输出依然是1,2;不能用作计数器之类需求。
你的例子用age不太适合。
第一种叫做"工厂模式",是依靠函数执行来返回一个对象然后赋给变量。在你的代码中就是依靠一个匿名函数的执行来返回一个具有getAge方法的对象,然后把这个对象赋值给了变量Dog。
第二种叫做"构造函数模式",这种模式可以理解为是js函数的一种特性。js中,函数可以作为构造函数以new func();的方式来创建对象,而且重点在于函数内可以依靠this关键字来指定生成对象的属性和方法。在你的代码中Dog就是构造函数,函数内部的this.getAge=...则指定了凡是new Dog()生成的对象都具有getAge这么一个方法。
(2)如果是像你的代码这样,就只生成一个对象,从功能上来说两种方法确实区别不大。
如果是生成多个对象对象的时候,区别就出来了,第一种方法每生成一个对象就需要执行一次匿名函数,而第二种方法只需要new一下即可;更重要的区别在于第一种方法生成的对象无法判别对象的类别,而第二种方法生成的对象都有一个共同的类Dog,这一点也反映了两种方法在思想的上区别,第一种只求对象的生成,而第二种则是面向对象,在编写较为复杂的js程序时显然第二种更合适和高效。
(3)虽然第二种在编写复杂程序时相比而言更合适,实际操作中,一般都会采用更面向对象的方式即"原型模式"(构造函数+prototype)而不会单独使用构造函数。关于js面向对象编程,网上有很多好文章,楼主可以自行google一下。
对象模式 使用第二种(这样的对象在整个应用中要new 若干次)实际就看你的业务逻辑了