最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • JavaScript,究竟是面向对象还是基于对象?

    正文概述 掘金(JarrettWang)   2021-01-02   541

    什么是面向对象

    1. 一个可以触摸或者可以看见的东西
    2. 人的智力可以理解的东西
    3. 可以指导思考或行动(进行想象或施加动作)的东西

    对象有以下三个特点

    1. 对象具有唯一标识性:即使完全相同的两个对象,也并非同一个对象。
    2. 对象有状态:对象具有状态,同一对象可能处于不同状态之下。
    3. 对象具有行为:即对象的状态,可能因为它的行为产生变迁。

    首先对象具有唯一标识性。JS中不同的对象是不相等的,即便它们长得一摸一样,但是指向的地址不同

     let o1 = { a: 1 };    
     let o2 = { a: 1 };    
     console.log(o1 === o2); // false
    

    关于特征和行为。不同的语言有不同的描述方式

    C++中称为成员变量和成员函数,Java中称为属性和方法,JS中,统一称为属性

    JS的对象

    JavaScript满足了对象的三个基本特征,同时又有着自己的特色

    JavaScript的对象具有高度动态性,可以在运行时为对象添加状态和行为

    //定义完再添加
    let o={a:1}
    o.b=2
    

    JavaScript对象具有两类属性

    1. 数据属性
      • value:就是属性的值。
      • writable:决定属性能否被赋值。
      • enumerable:决定 for in 能否枚举该属性。
      • configurable:决定该属性能否被删除或者改变特征值。
    2. 访问器属性
      • getter:函数或 undefined,在取属性值时被调用。
      • setter:函数或 undefined,在设置属性值时被调用。
      • enumerable:决定 for in 能否枚举该属性。
      • configurable:决定该属性能否被删除或者改变特征值。

    writable、enumerable、configurable都默认为true,可以用getOwnPropertyDescriptor查看

       var o = { a: 1 };
       o.b = 2;
       //a和b皆为数据属性
       Object.getOwnPropertyDescriptor(o,"a") // {value: 1, writable: true, enumerable: true, configurable: true}
       Object.getOwnPropertyDescriptor(o,"b") // {value: 2, writable: true, enumerable: true, configurable: true}
    

    可以使用Object.defineProperty改变属性的特征,或者定义访问器属性

       var o = { a: 1 };
       Object.defineProperty(o, "b", {value: 2, writable: false, enumerable: false, configurable: true});
       //a和b都是数据属性,但特征值变化了
       Object.getOwnPropertyDescriptor(o,"a"); // {value: 1, writable: true, enumerable: true, configurable: true}
       Object.getOwnPropertyDescriptor(o,"b"); // {value: 2, writable: false, enumerable: false, configurable: true}
       o.b = 3;
       console.log(o.b); // 2
    

    JavaScript对象的运行时其实就是一个属性的集合,属性以字符串或者Symbol为key,对象是一个属性的索引结构

    总结

    JavaScript的对象设计与主流的基于类的对象的差异很大,所以会有JavaScript不是面向对象之争。但是JavaScript提供了完全运行时的对象系统,所以它可以模仿多数面向对象编程范式,所以它是正统的面向对象语言


    起源地下载网 » JavaScript,究竟是面向对象还是基于对象?

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元