前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >javaScript 的面向对象程序

javaScript 的面向对象程序

作者头像
用户1197315
发布于 2019-12-30 09:32:58
发布于 2019-12-30 09:32:58
1.1K00
代码可运行
举报
文章被收录于专栏:柠檬先生柠檬先生
运行总次数:0
代码可运行

理解对象

  属性类型

数据属性(数据属性包含一个数据值的位置,这个位置可以读取和写入值,数据属性有4描述)

      [Configurable]:表示能否通过 delete 删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性的特性,或者能否把属性修改为访问器属性,像前面例子中

        那样直接在对象上定义的属性,他们的这个特性默认为true.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
       var person = {};
       Object.defineProperty(person,'name',{
          configurable:false,
          value:"Nicholas"
       });
        alert(person.name); // "Nicholas"
       delete person.name;
        alert(person.name); //"Nicholas"

      [Enumerable]: 表示能否通过for-in 循环返回属性。像前面例子中那样直接在对象上定义的属性,它们的这特性默认值为true.

      [Writable]: 表示能否修改属性的值,像前面例子中那样直接子对象上定义的属性,它们的这个属性默认值为true.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
       var person = {};
       Object.defineProperty(person,'name',{
          writable:false,
          value:"Nicholas"
       });
        alert(person.name); // "Nicholas"
       person.name = "Greg";
        alert(person.name); //"Nicholas"

      [Value]: 包含这个属性的数值,读取属性值的时候,从这个位置读; 写入属性值的时候把新值保存在这个位置,这个属性的默认值为undefined;

访问器属性 (访问器属性不能直接定义,必须使用Object.defineProperty() 来定义)

      [Configurable]:表示能否通过 delete 删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性的特性,或者能否把属性修改为访问器属性,像前面例子中

        那样直接在对象上定义的属性,他们的这个特性默认为true.

      [Enumerable]: 表示能否通过for-in 循环返回属性。像前面例子中那样直接在对象上定义的属性,它们的这特性默认值为true.

      [Get]: 在读取属性时调用的函数。默认值为undefined。

      [Set]: 在写入属性时调用的函数。默认值为undefined。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        var book={
           _year:2004,
            edition:1
        }
        Object.defineProperty(book,"year",{
          get:function(){
            return this._year;
          },
          set:function(newValue){
            if(newValue > 2004){
              this._year = newValue;
              this.edition += newValue -2004;
            }
          }
        })
        book.year = 2005;
        console.log(book.edition) // 2
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        var obj = {
            _x:"obj._x",
          _y:"obj._y",
          _z:"Obj._z"
        }
        Object.defineProperty(obj,"x",{   // x属性,只读不写
          get:function(){
            return this._x;
          }
        });
        console.log(obj.x); // "obj._x"
        obj.x = "Rewrite x";  // 尝试修改x属性
        console.log(obj.x); // "obj.x"     写入失败
        
        Object.defineProperty(obj,"y",{   // y属性,只写不能读
          set:function (newValue){
            this._y = newValue;
          }
          
        });
        console.log(obj.y);      // "undefined"    读取失败
        obj.y = "Rewrite obj.y";     // 尝试修改属性
        console.log(obj._y);      // "Rewrite obj.y" 可以写入

        Object.defineProperty(obj,"z",{
          get:function(){
            return this._z;
          },
          set:function (newValue){
             this._z = newValue;
          }
        });
        console.log(obj.z);      //"obj.z"
        obj.z = "Rewrite obj.z";   // 修改z 属性
        console.log(obj._z);     // "Rewrite obj.z"

    创建访问器属性一般使用两个标准方法:_defineGetter_()和_defineSetter_()。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    var  book = {
            _year;2004,
            edition:1
    };
    // 定义访问器的旧有方法
    book.__defineGetter__("year",function(){
        return this._year;
    });
    book.__defineSetter__("year",function(newValue){
      if(newValue > 2004){
        this._year = newValue;
        this.edition += newValue -2004;
      }
    });
    book.year = 2005;
    console.log(book.edition);   // 2

定义多个属性 对象定义多个属性的可能性很大,利用Object.defineProperties() 方法可以通过描述一次定义多个属性。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    var book = {};
    Object.defineProperties(book,{
      _year:{
        value;2004
      },
      edititon:{
        value;1
      },
      year:{
        get:function(){
          return this._year;
        },
        set:function(newValue){
          if(newValue > 2004{
            this._year = newValue;
            this.edition += newValue -2004;
          }
        }
      }
    })

    读取属性的特性 Object.getOwnPropertyDescriptor() 方法可以取得给定属性的描述符,这个方法接收两个参数 属性所在的对象和要读取其描述的属性

         返回是一个对象: 如果是访问器属性,这个对象属性有 configurable,enumerable,get 和set;

                 如果是数据属性 ,这个的对象的属性有 configurable,enumerable,writable和value。   

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
          var book = {};
          Object.defineProperties(book,{
            _year:{  
              value;2004
            },
            edition:{
              value:1
            },
            year:{
              get:function(){
                return this._year;
              },
              set:funtion(newValue){
                if(newValue > 2004){
                  this._year = newValue;
                  this.edition += newValue - 2004;
                }
              }
            }
          })

          var   descriptor = Object.getOwnPropertyDescriptor(book,"_year");
          console.log(descriptor.value); // 2004
          console.log(descriptor.configurable); //false
          console.log(descriptor.get);  // undefined
          var descriptor = Object.getOwnPropertyDescriptor(book,"year");
          console.log(descriptor.value); // undefined
          console.log(descriptor.enumerable) // false
          console.log(typeof descriptor.get) // function

创建对象

   工厂模式 

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    function createPerson(name,age,job){
      var o = new Object();
      o.name = neame;
      o.age = age;
      o.job = job;
      o.sayName = function(){
        console.log(this.name)
      };
      return o;
     }
     var person1 = createPerson("Nicholas",29,"Software Engineer");
      var person2 = createPerson("Greg",27,"Doctor")
      // 函数 createPerson()  能够根据接受的参数来构建一个包含所有必要信息的person对象。

   构造函数模式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    function Person(name,age,job){
      this.name = name;
      this.age = age;
      this.job = job;
      this.sayName = function(){
        console.log(this.name);
      }
      var person1 = new Person("Nicholas",29,"Software Enginerer");
      var person 2 = new Person("Greg",27,"Doctor");
     }    

        要创建Person 的实例,必须使用new 操作符,以这种方式调构造函数实际上会经历以下4个步骤

          1.创建一个行对象。

          2.构造函数的作用域赋给新对象(因此this 就指向了这个新对象)

          3.执行构造函数中的代码(为这个新对象添加属性)

          4.返回新对象。

   原型模式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    function Person(){}
    Person.prototype.name = "Nicholas";
    Person.prototype.age = 29;
    Person.protoype.sayName = function(){
        alert(this.name);
    };
    var person1 = new Person();
    person1.sayName(); // "Nicholas"
    var person2 = new Person();
     person2.sayName();
    alert(person1.sayName == person2.sayName); // true
    

    在实例中无法访问到[[Prototype]],可以通过isPrototypeOf() 方法来确定对象直接是否存在这种关系。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
      console.log(Person.prototype.isPrototypeOf(person1)); // true

      console.log(Person.prototype.isProtoypeOf(Person2));// true

     Object.getPrototypeOf(),在所有支持的实现中,这个方法返回[[Protoype]]的值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 console.log(Object.getPrototypeOf(person1) == Person.prototype); // true

      console.log(Object.getPrototypeOf(person1).name); // "Nicholas"

     使用delete 操作符则可以完全删除实例属性,可以重新访问原型中的属性。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        function Person(){}
        Person.prototype.name = 'Nicholas';
        Person.prototype.age = 29;
        Person.prototype.job = "Software Engineer";
        Person.protooype.sayName = function(){
          console.log(this.name)
        }
        var person1 = new Person();
        var person2 = new Person();
        person1.name = "Greg";
        console.log(person1.name); // "Greg"    来自实例
        console.log(person2.name); // "Nicholas"   来自原型
        delete person1.name;
        console.log(person1.name); // “Nicholas”  来自原型

      Object.keys() 方法 接收一个对象作为参数,返回一个包含所有可枚举属性的字符串数组。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        function Person(){}
        Person.prototype.name = "Nicholas"
        Person.prototype.age = 29;
        Person.prototype.job = "Software Engineer"
        Person.prototype.sayName = function(){
           console.log(this.name);
        }
        var keys =Object.keys(Person.ptototype);
        console.log(keys) // "name,age,job,sayName"

        var p1 = new Person();
        pl.name = "Rob";
        p1.age = 31;
        var p1keys = Object.keys(p1);
        console.log(p1keys); //"name,age"

      无论是否可枚举,都可以使用Object.getOwnPropertyNames();

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        var keys = Object.getOwnPertyNames(Person.protoype);
       console.log(keys) // “constructor,name,age,job,sayName”

       对象字面量来重写原型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        function(){}
        Person.prototype = {
          name:"Nicholas",
          age:29,
          job:"Software Engineer",
          sayName:function(){
            console.log(this.name);
          }
        }

      重设构造函数  

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
      Object.defineProperty(Person.prototype."constructor",{
        enumerable:false,
        value:Person
      })

      实例中的指针仅指向原型,而不执行构造函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
       function Person(){}
       var friend = new Person();
       Person.prototype = {
          constructor:Person,
          name:"Nicholas",
          age:29,
          job:"Software",
          sayName:function(){
            console.log(this.name)
          }
       };
       friend.sayName(); // error

   组合使用构造函数模式和原型模式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
       function Person(name,age,job){
          this.name = name;
          this.age = age;
          this.job = job;
          this.friends = ["Shelby","Court"];
       }
      Person.protoype = {
        constructor :Person,
        sayName:function(){
          console.log(this.name)
        }
      }
      var person1 = new Person("Nicholas",29,"Software Engineer");
      var person2 = new Person("Greg",27,"Doctor")

      person1.friends.push("Van");
      console.log(person1.friends); // "Shelby,Count,Van"
      console.log(person2.friends); //"Shelby,Count"
      console.log(person1.friends === person2.frends); // false
      console.log(person1.sayName === person2.sayName); // true

   动态原型模式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
      funciton Person(name,age,job){
        // 属性
        this.name = name;
        this.age = age;
        this.job = job;
        // 方法
        if(typeof this.sayName != "function"){
          Person.prototype.sayName = function(){
            console.log(this.name)
          }
        }
      }
      var friend = new Person("Nicholas",29,"Softeare Engineer");
      friend.sayName();

   寄生构造函数模式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    function Person(){
      var o = new Object();
      o.name = name;
      o.age = age;
      o.job = job;
      o.sayName = function(){
        console.log(this.name)
      }
      return o;
    }
    var friend = new Person('Nicholas',29,"Software Engineer");
    friend.sayName(); //"Nicholas”

   稳妥构造函数模式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    function Person(name,age,job){
      // 创建要返回的对象
      var o = new Object();
      // 可以在这里定义私有变量和函数
      // 添加方法
      o.sayName = function(){
        console.log(name)
      }
      // 返回对象
      return o;
    }
    var friend = Person("Nicholas",29,"Software Engineer");
    friend.sayName(); // "Nicholas"

继承  (ECMAScript 只支持实现继承,而且实现继承主要依靠)

  原型链

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    function SuperType(){
      this.property = true;
    }
    SuperType.protoype.getSuperValue = function(){
      return this.property;
    };
    function SubType(){
      this.subproperty = false;
    }
    // 继承了 SuperType
    SubType.prototype = new SuperType();
    SubType.prototype.getSubValue = function(){
        return this.subproperty;
    };
    var instance = new SubType();
    console.log(instance.getSuperValue()) // true
    // 在调用 instance.getSuperValue() 会经历三个搜索步骤1.搜索实例2.搜索SubType.prototype;3.搜索SuperType.ptototype ,最后一步才会找到方法

      1.所有函数的默认原型都是Object的实例,默认原型会包含一个内部指针,指向 Object.prototype 这也是所有自定义类型都会继承 toString() ,valueOf() 等默认方法的根本原因。

      2.确定原型和实例的关系 (第一种方式是使用instanceof, 第二个方式是使用isPrototypeOf())

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        console.log(instance instanceof Object);  // true
        console.log(instance instanceof SuperType)  // true
        console.log(instance instanceof SuperType) //true
      
         console.log(Object.prototype.isPrototypeOf(instance));  // true
        console.log(Object.prototype.isPrototypeOf(instance)); // true
              console.log(Object.prototype.isPrototypeOf(instance)); // true

      3.有时候需要重新超类中的某个方法,给原型添加方法一定要房子替换原型语句之后。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        function SuperType(){
          this.property = true;
        }
        SuperType.prototype.getSuperValue = function(){
          return this.property;
        }
        function SubType(){
          this.subproerty = false;
        }
        // 继承了SuperType
        SubType.prototype = new SuperType();
        // 添加新方法
        SubType.prototype.getSubValue = function(){
          return this.subproperty;
        };
        // 重写超类型中的方法,
        SubType.prototype.getSuperValue = function(){
          return false;
        }
        var instance = new SubType();
        console.log(instance.getSuperValue()); // false

      4.原型链的问题 

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
       function SuPerType(){
              this.colors = ['red','blue',"green"]
       }
       function SubType(){}
       // 继承了 SuperType
       var instance1 = new SuperType();
      instancel.colors.push("black");
      console.log(instance1.colors);
      
      var instance2 = new SubType();
      console.log(instance2.colors); //"red,blue,green,black"
      var instance2 = new SubType();
      console.log(instance2.colors); // "red,blue,green,black"

  借用构造函数 (函数只不过是在特定环境中执行代码的对象,因此通过使用apply() 和 call() 方法也可以在将来新创建的对象上执行构造函数)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    function SuperType(){
      this.colors = ["red","blue","grren"];
    }  
    function SubType(){
      // 继承了SuperType
      SuperType.call(this);
    }
   var instance1 = new SubType();
   instance1.colors.push("black");
   conole.log(insstance1.colors); // 'red,blue,green,black'
   var instance2 = new SubType();
    console.log(instance2.colors);  //"red,blue,green"
   

  组合继承(是将原型链和借用构造函数组合到一起)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    function SuperType(name){
           this.name = name;
        this.colors = ["red","blue","green"]
     }
     SuperType.prototype.sayName = function(){
      console.log(this.name);
    }
     function SubType(name,age){
      // 继承属性
      SuperType.call(this,name);
          this.age = age;
     }
     //继承方法
     SubType.prototype = new SuperType();
     SubType.prototype.sayAge = function(){
     console.log(this.age);
    }
    var instancel = new SubType("Nicolas",29);
    instancel.colors.push("black")
    console.log(instancel.colors);  // "red,blue,green,black"
    instancel.sayName();            // "Nicholas" 
    instancel.sayAge();         //29
    
    var instnce2 = new SubType("Greg",27);
   console.log(instnce2.colors); // "red,blue,green"
   instance2.sayName();      // "Greg"
   instance2.sayAge();      // 27

  原型式继承

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    var person = {
      name:"Nicholas",
      friends:["Shelby","Court","Van"]
    }
    var anotherPerson = Object.create(person);
    anotherPerson.name = "Greg";
    anotherPerson.friends.push("Rob");

    var yetAnotherPerson = Object.create(person);
    yetAnotherPerson.name = "Linda";
    yetAnotherPerson.friends.push("Barbie");
    
    console.log(person.friends); // "Shelby,Court,Van,Rob,Barbie"
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    var person = {
      name:"Nicholas",
      friends:["Shelby","Court","Van"]
    }
    var anotherPerson = Object.create(person,{
        name:{
          value:"Greg"
        }
    })
    console.log(anotherPerson.name); // "Greg"

  寄生式继承

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  function createAnother(original){
      var clone = Object(original);   // 通过调用函数创建一个新对象
      clone.sayHi = function(){       // 以某种方式来增强增对象
        console.log("hi")
      }
      return clone;    // 返回这个对象
  }
  var person = {
    name:"Nicholas",
    friends:["Shelby","Court","Van"]
  };
  var anotherPerson = createAnother(person);
  anotherPerson.sayHi(); // "hi"

  寄生组合式继承

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  function SuperType(name){
    this.name = name;
    this.colors = ["red","blue","green"];
  }
  SuperType.prototypes.sayName = function(){
    SuperType.call(this,name);  // 第二次调用SuperType
    this.age = age;
  }
  SubType.prototype = new SuperType();   // 第一次调用 SuperType
  SubType.prototype.constructor = SubType;
  subType.prototype.sayAge = function(){
    console.log(this.age)
  }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-12-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JavaScript 知识点整理
JavaScript是按照ECMAScript标准设计和实现的,后文说的JavaScript语法其实是ES5的标准的实现。 先说说有哪些基础语法? 最基础语法有哪些? 基础语法几乎所有的语言差异不大,无非数据类型、操作符、控制语句、函数等,简单列举下。 5种基本数据类型 & 1种复杂的数据类型 JavaScript包含5种基本数据类型,分别是undefined / null / boolean / number / string,基本数据类型就这五种,没有其他的! JavaScript包含1种复杂的
用户1667431
2018/04/18
8600
JavaScript 知识点整理
【说站】javascript组合继承是什么
以上就是javascript组合继承的介绍,希望对大家有所帮助。更多Javascript学习指路:Javascript
很酷的站长
2022/11/23
2820
“工厂、构造、原型” 设计模式与 JS 继承
持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情
掘金安东尼
2022/09/19
1K0
JavaScript寄生式组合继承
组合继承也被称为伪经典继承,它综合了我们昨天说的原型链和盗用构造函数,将俩者的有点结合在了一起。它的基本思想是使用原型链继承原型上的属性和方法,通过盗用构造函数继承实例属性,这样的好处就是可以把方法定义在原型上复用,每个实例又有自己的属性。
大熊G
2022/11/14
3030
JavaScript面向对象程序设计之继承(一)
原型模式是JavaScript中创建对象的一种最常见的方式。JavaScript是一种弱类型的语言,没有类的概念,也不是一种面向对象的语言。但是,在JavaScript中,借助函数的原型(也就是prototype)可以实现类的功能。
CherishTheYouth
2021/02/02
3720
一文完全吃透 JavaScript 继承(面试必备良药)
继承给我们提供了一种优雅可复用的编码方式,继承也是面试中经常被问到的问题,本文全面总结了JavaScript 中的继承类型、各个继承类型的优缺点及使用场景等,一文吃透 JavaScript 继承,收藏起来吧~
winty
2020/02/24
4540
一文完全吃透 JavaScript 继承(面试必备良药)
浅谈JavaScript的面向对象程序设计(四)
  本文继续讲解JavaScript的面向对象程序设计。继承是面向对象语言中的一个基本概念,面向对象语言支持两种继承实现方式:接口继承和实现继承。接口继承只继承方法签名,而实现继承则继承实际的方法。但是在JavaScript中函数时没有签名的,所以无法实现接口继承。JavaScript支持实现继承,而且其实现继承主要是通过原型链继承的。 原型链 JavaScript中有原型链的概念,并将原型链作为实现继承的主要方法。基本实现思想是让一个函数的原型继承另外一个函数的原型的属性和方法。每一个函数都有一个原型对
水击三千
2018/02/27
5890
JavaScript(七)
这一篇,我们说说 ES 中的面向对象。 ECMAScript 中没有类的概念,因此它的对象也与基于类的语言中的对象有所不同。 ECMA-262 把对象定义为: “无序属性的集合,其属性可以包含基本值、对象或者函数。” 对象的每个属性或方法都有一个名字,而每个名字都映射到一个值。我们可以把 ECMAScript 的对象想象成散列表: 一组键值对,其中值可以是数据或函数。
1ess
2021/10/29
3070
js程序设计03——面向对象
ECMAScript中有2中属性:数据属性、访问器属性。 数据属性是为了指定某对象的指定key上的一些行为,比如value是否可删除、修改、key可循环遍历等特点。而访问器属性不包含数据值,包含一堆g
用户1141560
2017/12/26
1.2K0
js程序设计03——面向对象
JavaScript 高级程序设计(第 4 版)- 对象、类与面向对象编程
通过字面量来重写原型时,Person.prototype被设置为等于一个通过对象字面量创建的新对象,此时Person.prototype的constructor属性就不指向Person了
Cellinlab
2023/05/17
6520
JavaScript 高级程序设计(第 4 版)- 对象、类与面向对象编程
JavaScript之对象继承
该方法创建一个仅用于封装继承过程的函数,该函数在内部以某种方式来增强对象,最后再像真地是它做了所有工作一样返回对象。
laixiangran
2018/07/25
4430
深入理解javascript对象
对象被定义为一组属性的无序集合,对象就是一组没有特定顺序的值。对象的每个value值都由一个key来标识,一个key映射一个value值。
javascript艺术
2022/11/22
3890
重读《JavaScript高级程序设计》
ECMAScript 函数不能像传统意义上那样实现重载。而在其他语言(如Java)中,可以为一个函数编写两个定义,只要这两个定义的签名(接受的参数类型和数量)不同即可[p66]。ECMAScript的类型是松散形的,没有签名,所以是没有重载的。
Jimmy_is_jimmy
2019/07/31
1.1K0
面向对象编程
面向对象把构成问题的transaction分解成各个对象,而建立对象的目的也不是为了完成一个个步骤,而是为了描述某个事物在解决整个问题的过程中所发生的行为,意在写出通用代码,加强代码重用,屏蔽差异性。
子舒
2022/06/09
7000
面向对象编程
《JavaScript高级程序设计》学习笔记(5)——面向对象编程
 欢迎关注本人的微信公众号“前端小填填”,专注前端技术的基础和项目开发的学习。   本节内容对应《JavaScript高级程序设计》的第六章内容。 1、面向对象(Object-Oriented, OO)的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象。前面提到过,ECMAScript中没有类的概念,因此它的对象也与基于类的语言中的对象有所不同。 ECMA-262把对象定义为:“无序属性的集合,其属性可以包含基本值、对象或者函数。”严格来讲,这就相当于说对象是一组没有
mukekeheart
2018/03/01
7360
JavaScript实现继承
本文不准备深入细节,主要是对《JavaScript高级程序设计中》介绍的JS如何实现继承做一个总结,毕竟好记性不如烂笔头。文末会附带一张神图,搞清楚这张图,原型链也就没有什么问题了。
leocoder
2018/10/31
6740
【JavaScript】 JS面向对象的模式与实践
参考书籍 《JavaScript高级语言程序设计》—— Nicholas C.Zakas 《你不知道的JavaScript》  —— KYLE SIMPSON 在JS的面向对象编程中,我们最为关注的是两种行为,一是创建对象,二是类继承 JS创建对象 一.构造函数模式创建对象 第一种创建对象的方式是构造函数模式 如下所示, 将构造函数中的属性和方法赋给一个新对象 /** * description: 构造函数模式创建对象 */ function Type (p) {   this.param = p; /
啦啦啦321
2018/03/30
1.2K0
【JavaScript】 JS面向对象的模式与实践
面向对象的程序设计
ECMA-262把对象定义为:”无序属性的集合,其属性可以包含基本值、对象或者函数。”
奋飛
2019/08/15
4400
JS-面向对象的程序设计
今天重读了一下<<JavaScript高级程序设计>>的几章,其中的面向对象的程序设计,写的很好,让自己受益匪浅,特此记录.
拿我格子衫来
2022/01/23
3730
JS 继承的多种方法
学过java的同学应该都知道,继承是java的重要特点之一,许多面向对象的语言都支持两种继承方式:接口继承和实现继承,接口继承只继承方法签名,而实现继承则继承实际的方法,在js中,由于函数没有签名,因此支持实现继承,而实现继承主要是依靠原型链来实现的,那么,什么是原型链呢?
grain先森
2019/03/28
2.9K1
JS 继承的多种方法
相关推荐
JavaScript 知识点整理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档