如何用JavaScript定义一个类

 我原来的写法都是这样:

 

1 function Dog(){
2   this.name = 'hachi';
3 }
4   
5 Dog.prototype = {
6   makeNoise:function(){
7     alert('wangwangwang');
8   }
9 };

后来又看到另外一种复杂一点而且看起来好像没有必要的写法:

 

01 function Dog(){
02   var privateVariable = 'secret';
03   
04   var fn = function(){
05     //...
06   }
07   
08   fn.prototype = {
09     makeNoise:function(){
10       alert('wangwangwang');
11     }
12   }
13   
14   return fn;
15 }

这里的Dog函数其实是一个 制造类 的函数,它返回了真正的Dog类。
感觉这样做的好处是更好的实现了封装。
例如这里的privateVariable就是一个私有变量:

 

1 var d = new Dog;
2 d.privateVariable //undefined

另外如果在第一个例子的最后加上一句:

 

1 Dog.prototype = {
2   //e...WTF??
3 }

这样Dog就不是Dog了~

后来的理解:
上面这样新建类的方法直接重写了prototype对象。这样prototype原本内置的属性就没有了(arguments, call, apply等)。
下面这种新建类的方法好像更好一些:

 

1 var Dog = function(name){
2   this.name = name;
3   var privateVariable = 'you cannot see me.';
4   this.getPrivate = function(){return privateVariable;};
5 }
时间: 2024-10-29 03:08:30

如何用JavaScript定义一个类的相关文章

如何用JavaScript定义一个类_基础知识

我原来的写法都是这样: function Dog(){ this.name = 'hachi'; } Dog.prototype = { makeNoise:function(){ alert('wangwangwang'); } }; 后来又看到另外一种复杂一点而且看起来好像没有必要的写法: function Dog(){ var privateVariable = 'secret'; var fn = function(){ //... } fn.prototype = { makeNois

第三节--定义一个类 -- Classes and Objects in PHP5 [3]

object|php5 /*+-------------------------------------------------------------------------------+| = 本文为Haohappy读<<Core PHP Programming>> | = 中Classes and Objects一章的笔记 | = 翻译为主+个人心得 | = 为避免可能发生的不必要的麻烦请勿转载,谢谢 | = 欢迎批评指正,希望和所有PHP爱好者共同进步! +--------

python通过定义一个类实例作为ftp回调方法

  本文实例讲述了python通过定义一个类实例作为ftp回调方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 class Writer: def __init__(self, file): self.f = open(file, "w") def __call__(self, data): self.f.write(data) self.f.write('n') print data FILENAME = "AutoI

c++-C++可以在类中定义一个类吗?

问题描述 C++可以在类中定义一个类吗? 比如像下面这样: 解决方案 完全可以注意:内部类可以访问外部类的私有成员,外部类不能访问内部类的私有成员! 解决方案二: 可以呀,就像在结构体里申明结构体一样,不过好像通常不这样用. 解决方案三: 嵌套类的概念,相当于一个内部类. 解决方案四: 可以的,不过看起来比较别扭 解决方案五: 可以,嵌套类有以下性质: 一.**可见性**嵌套类对于外围类: 嵌套类仅仅是声明在外围类内部的类型,而不是外围类的成员 外围类不具备嵌套类所定义的成员 对于外围类来说,嵌

不确定数据多少的类-c++如何定义一个类中的数据不确定的类

问题描述 c++如何定义一个类中的数据不确定的类 比如 class s { public: s(int a) {b=a;} ... private: int b; int w[b]; ..... }; 我试着用new,但是还是不成功,那么有什么办法可以使类中的数据多少由外部确定呢? 这是我在重载[]成员访问运算符 和重载()函数调用运算符时遇到的问题. 解决方案 用静态数组的时候,必须同时指明数组的大小,比如int w[10],这是因为静态数组在栈上分配,在编译的时候就已经分配好内存了.楼主可以

javascript-如何用JavaScript 修改一个带参数的 onclick 的方法???

问题描述 如何用JavaScript 修改一个带参数的 onclick 的方法??? 比如 添加 怎么通过javascript用 document.getElementById("foo").onclick修改onclick所调用的方法,换成另一个带参数的方法 解决方案 document.getElementById('foo').onclick=function(){ show(param); }; 如果感觉有用,请采纳 解决方案二: 重新再写一个,后写的会覆盖前写的

如何定义一个类 编译时,使得第一行报错,第二行正确

问题描述 如何定义一个类Aint main(){ A a; //第一行 A *b=new A(); //第二行}如何定义一个类 编译时,使得第一行报错,第二行正确 问题补充:enet_java 写道 解决方案 [quote java]#include "stdio.h"class test{public:static test* getinstance(){return(new test());}int puthello(){puts("hello world");

第三节--定义一个类_php基础

+-------------------------------------------------------------------------------+ | = 本文为Haohappy读<<Core PHP Programming>>  | = 中Classes and Objects一章的笔记  | = 翻译为主+个人心得  | = 为避免可能发生的不必要的麻烦请勿转载,谢谢  | = 欢迎批评指正,希望和所有PHP爱好者共同进步!  | = PHP5研究中心: htt

请问,如果要定义一个类的话,哪都可以使用这个类,应该在哪定义啊,?

问题描述 如题.比如说我想定义一个类,这个类有个方法能生成验证码图片,我想在很多地方使用,我想把它隔出来,我应该在哪写这个类呢/ 解决方案 解决方案二:App_Code文件夹解决方案三:楼上的可以,当然你也可以写类库,封装成dll解决方案四:一般是在App_Code里解决方案五:bll解决方案六:谢谢哦,