ExtJs继承行为

mik*_*mik 6 javascript inheritance extjs

有人可以向我解释这种行为.让我们声明一个类:

Ext.define('baseClass',{
    a:null,
    ar:[],

    add:function(v) {
        this.ar.push(v);
    },
    sayAr:function() {
        console.log(this.ar);
    },

    setA:function(v) {
        this.a= v;
    },
    sayA:function() {
        console.log(this.a);
    }
});
Run Code Online (Sandbox Code Playgroud)

现在我创建了两个对象

var a = Ext.create('baseClass');
var b = Ext.create('baseClass');
Run Code Online (Sandbox Code Playgroud)

测试财产

a.setA(1);
b.setA(2);

a.sayA();
b.sayA();
Run Code Online (Sandbox Code Playgroud)

这输出

1
2
Run Code Online (Sandbox Code Playgroud)

一切都很好,但是

a.add(1);
b.add(2);

a.sayAr();
b.sayAr();
Run Code Online (Sandbox Code Playgroud)

我们得到了

[1,2]
[1,2]
Run Code Online (Sandbox Code Playgroud)

这个我不明白.为什么它为两个对象使用单独的"a"属性,但使用一个"ar"数组."ar"未声明为静态!我根本得不到它.

Eva*_*oli 8

当你在类声明中放入一些东西时,它意味着它被推送到对象原型上(读取:它在所有实例中共享).对于字符串/数字/布尔值来说,这不是一个真正的问题,但是对于对象和数组,你会看到这种行为会起作用.

如果您希望每个实例都有一个数组/对象,那么您需要在实例中显式添加它:

Ext.define('baseClass',{
    a:null,

    constructor: function(){
        this.ar = [];
    }

    add:function(v) {
        this.ar.push(v);
    },
    sayAr:function() {
        console.log(this.ar);
    },

    setA:function(v) {
        this.a= v;
    },
    sayA:function() {
        console.log(this.a);
    }
});
Run Code Online (Sandbox Code Playgroud)