列挙するパターン、名前空間、オブジェクト継承JS

継承

継承の歴史

1、伝統的な形式 - プロトタイプチェーン

  • 過度の継承無用の性質

2、コンストラクタの借用

  • 私たちは、ボローコンストラクタのプロトタイプを継承することはできません
  • たびコンストラクタは、多機能を取ります

3、共有プロトタイプ

  • あなたはプロトタイプはプロトタイプオブジェクトも変化の性質を共有する、独自のカスタムプロトタイプを属性を追加することはできません。

4、聖杯モード

  //1.原型链
    Grand.prototype.lastName = "li";
    function Grand(){ } var grand = new Grand(); Father.prototype = grand; function Father(){ this.name = "kkk"; } var father = new Father(); Son.prototype = father; function Son(){ } var son = new Son(); //2、借用构造函数 function Person(name,age,sex){ this.name = name; this.age = age; this.sex= sex; } function Student(name,age,sex,grade){ Person.call(this,name,age,sex); this.grade = grade; } var student = new Student(); //3、共享原型 Father.prototype.lastName = "chen"; function Father(){ } function Son(){ } function inherit(target,origin){ target.prototype = origin.prototype; } inherit(Son,Father); var father = new Father(); var son = new Son(); //4、圣杯模式 !important Father.prototype.lastName = "chen"; function Father(){ } function Son(){ } function inherit(target,origin){ function F(){}; //target.prototype = new F();//不能放在F.prototype = origin.prototype之前,因为这里用的是修改之前的F的原型,没有指向origin的原型。 F.prototype = origin.prototype; target.prototype = new F();//target的原型是一个new的F对象,可以实现自定义的prototype的属性而不改变origin的原型。 target.prototype.constructor = target; target.prototype.uber = Origin.prototype;//超类,知道它的原型真正继承自哪里。 } inherit(Son,Father); var father = new Father(); var son = new Son();

名前空間

//命名空间 -- 解决命名重复的问题
    var grade = {
        class1:{
            zhangsan:{

            },
            lisi:{

            }
        },
        class2:{
            chen:{

            },
            ying:{

            }
        }
    }
    var chen = grade.class2.chen;

今繰り返し解決命名の問題は、一般的にWebPACKのツールをパッケージングを使用します

オブジェクトのプロパティとメソッドを呼び出します

1、連続通話

    //连续调用
    var methods = {
        name:"chen",
        age: 19,
        gender:"female",
        sayName:function (){
            console.log(this.name); return this; }, sayAge:function(){ console.log(this.age); return this; }, sayGender:function(){ console.log(this.gender); return this; } }; methods.sayName().sayGender().sayAge();//chen female 19 //函数最后返回的都是this对象,可以实现连续调用。 

図2に示すように、アクセス・オブジェクトのプロパティへのプロパティ名で
、これによりコードの量を減少させる、所望のパラメータオブジェクトのプロパティを呼び出すことによって達成することができます

//通过属性名访问对象属性
    var teachers = {
        teacher1:"chen",
        teacher2:"li",
        teacher3:"he",
        teacher4:"huang", sayTeacher:function(index){ return this['teacher'+index]; } }; teachers.sayTeacher(1);//chen teachers.sayTeacher(2);//li

Enumerationオブジェクト

ループ内のため
 //对象的枚举/遍历 enumeration
 //1.类比,数组的遍历
     var arr = [1,2,3,4,5]; for (var i = 0;i < arr.length;i++){ console.log(i); } //2.对象属相的遍历 var obj = { name:'chen', age:12, gender:'female', hight:174, prop:"ffa" } for (var prop in obj){//prop也可以换成其他名字 console.log(obj[prop] + " "+ typeof(prop)); }

1.hasOwnPropertyプロパティ
あなたにプロトタイプのプロパティにアクセスするので、hasOwnPropertyをフィルタを追加することができるため、理論、

for (var prop in obj){//prop也可以换成其他名字
        if(obj.hasOwnProperty(prop)){//判断属性是都是属于这个对象自己的
            console.log(obj[prop] + " "+ typeof(prop)); } }

2.in
3.instanceof

    • インスタンスB; //対象がコンストラクタ関数Bの外ではありません。
    • プロトタイプB Aがオブジェクトのプロトタイプチェーンを見てはありません。

おすすめ

転載: www.cnblogs.com/xiewangfei123/p/12208389.html