zoukankan      html  css  js  c++  java
  • JavaScript实现类,有多种方法。



    方法一:构造方法。
    1. function coder(){
    2. this.name = '小王';
    3. this.job = '程序员';
    4. this.coding = function ()
    5. {
    6. alert('我正在写代码');
    7. }
    8. }

    9. var coder=new coder();
    10. alert(coder.name);
    11. coder.coding();
    复制代码
    方法二:工厂方法。
    1. function createCoderFactory(){
    2. var obj=new Object();
    3. obj.name = '小王';
    4. obj.job = '程序员';
    5. obj.coding = function (){
    6. alert('我正在写代码');
    7. };
    8. return obj;
    9. }
    10. var coder = createCoderFactory();
    11. alert(coder.name);
    12. coder.coding();
    复制代码
    但工厂方法和构造方法都有着一个相同的缺点,就是每创建一个实例,都会实例化该类的每个函数。

    方法三:原形链。
    1. function coder(){}
    2. coder.prototype.name = '小王';
    3. coder.prototype.job = '程序员';
    4. coder.prototype.coding = function(){
    5. alert('我正在写代码');
    6. };
    7. var coder = new coder();
    8. alert(coder.name);
    9. coder.coding();
    复制代码
    但原行链有个缺点就是它所有属性都共享,只要一个实例改变其他的都会跟着改变。如:
    1. var coder1 = new coder();
    2. var coder2 = new coder();
    3. alert(coder1.name); /*显示“小王”*/
    4. coder2.name = '老王';
    5. alert(coder1.name); /*示“老王”*/
    6. alert(coder2.name); /*这个也显示“老王”*/
    复制代码
    方法四:混合方式。

    以上三种都有着各自的缺点,所以我们要加以改进。
    1. function coder(){
    2. this.name = '小王';
    3. this.job = '程序员';
    4. }
    5. coder.prototype.coding = function(){
    6. alert('我正在写代码');
    7. };
    复制代码
    方法五:动态原链。

    要解决前三种的缺点,还有一种方法。
    1. function coder(){
    2. this.name = '小王';
    3. this.job = '程序员';
    4. if (typeof(coder._init) == 'undefined'){
    5. this.coding = function ()
    6. {
    7. alert('我正在写代码');
    8. };
    9. this._init = true;
    10. }
    11. }
  • 相关阅读:
    函数名的应用/列表推导式
    装饰器/内置函数
    函数的基础
    文件的改的操作
    常用str
    python 定时器 timer QTimer
    Python 2.7.16 pyinstaller3.0 生成exe可执行文件
    python 根据excel单元格内容获取该单元格所在的行号
    python 实现仪器LAN口通信(FLUKE 8846)
    VS2019 MSB8041 MSB8042 Error
  • 原文地址:https://www.cnblogs.com/zengwei/p/1700557.html
Copyright © 2011-2022 走看看