javascript - js 关于面向对象写法问题??
阿神
阿神 2017-04-11 12:39:42
[JavaScript讨论组]

js 面向对象的写法:

// 第一种写法: 
// 也是我通常的写法,不过我感觉这样的写法看上去太过于分散,不像一个整体,总感觉不优雅
function Person(){
  this._name = 'test';
  ...
}

Person.prototype = {
  sayHello: function(){
    console.log(this.name);
  }
}

// 第二种写法: 
// 前几天又看了别人写的关于实现 jquery 框架的写法,这种写法不知道有什么优势??
// 我感觉就是 把 简单的 复杂化了 ...
// 看上去比较分散
var jQuery = function(selector , context){
   return new jQuery.fn.init(selector , context);
}
jQuery.fn = jQuery.prototype = {
  init: function(selector , context){
      // 这段看不太懂,应该是返回 实例的意思
      return this;
  }
  ....
}

jQuery.fn.init.prototype.init.prototype = jQuery.fn;

// 第三种写法: 
// 我感觉是最优雅的写法,不好的地方是在于成员变量共用,导致不支持并发使用...
// 构造函数可以通过 prototype 实现 实例化后的对象继承;这个无需实例化,该如何实现继承??
var Tool = {
   name: 'test' , 
   sayName: function(){
     console.log(this.name);
   }
}

// 第四种写法:
// 看上去比较比较分散...
function Move(){
  this.name = 'test';
}

(function(fn){
  fn.sayName = function(){
     console.log(this.name);
  };
})(Move.prototype);

以上是我所知的js面相对象的写法,我非常想使用第三种写法,可我不知道怎么解决他存在的问题?? 也麻烦大家对比下这几种写法的优劣。

核心的还是,如何使第三种写法成为通用写法(我打算以后就用这种写法,若是能够解决它存在的问题的话)??

阿神
阿神

闭关修行中......

全部回复(4)
伊谢尔伦
  1. 你要是嫌原型和构造函数分开写这种写法分散,看着不爽,你可以试试ES6的class语法,虽然class使用起来不够灵活,而且本质上也只是语法糖而已,不过看起来是要紧凑许多。

    class Person{
        constructor() {
            this._name = 'test';
            ...
        }
        
        sayHello(){
            console.log(this.name);
        }
    }
  2. jq的这种写法原因其实很简单,为了省略一个new。创建类的实例,从来都是var test = new Person()这样的。但是你在使用jq的时候肯定没有这么写过吧var test = new $("#id")。jq的这种看起来比较复杂的写法就是为了省掉前面那个new

  3. 字面量创建对象挺好的,但是不能直接继承,而且如果你想构造的类逻辑很复杂怎么办?字面量创建可都是一对一的属性赋值,不能像普通构造函数那样运行复杂逻辑。

  4. 这么奇怪的写法没见过。立即运行函数毫无疑问是为了隐藏内部变量,这么写毫无意义。

  5. 你所谓的“紧凑”、“分散”,我敢打赌肯定是你想在编辑器里面把一个类折叠成一行…………说真的,这类强迫症是得治

PHP中文网

可以去查一下红宝书的第六章

巴扎黑

第三种叫工厂模式,需要加一些东西:

 function Factory(){
 
    var Tool = {
       name: 'test' , 
       sayName: function(){
         console.log(this.name);
       }
    }
    
    return Tool;
 }
 
 // 实例化
 var example = Factory();
 
 //当然一般来说Factory会有参数传递,用于内部添加内部对象的属性
天蓬老师

the good part of javascript

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

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