Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
类别/方法/属性Javascript错误_Javascript - Fatal编程技术网

类别/方法/属性Javascript错误

类别/方法/属性Javascript错误,javascript,Javascript,我有这门课 function cnv(){ this.attribute1; } 因此,当我这样做时,我需要: var c = new cnv(); c.attribute1 = 'rojo'; 如果我在aaAttributes中做了一些更改,例如aaAttribute1,这将调用一些方法: cnv.prototype.method1 = function (){ ...code } 所以基本上我需要知道,当我在类中更改一些atribute时,这个更改是否可以调用一些函数作

我有这门课

function cnv(){
   this.attribute1;
}
因此,当我这样做时,我需要:

var c = new cnv();

c.attribute1 = 'rojo';
如果我在aaAttributes中做了一些更改,例如aaAttribute1,这将调用一些方法:

cnv.prototype.method1 = function (){
    ...code
}
所以基本上我需要知道,当我在类中更改一些atribute时,这个更改是否可以调用一些函数作为方法,谢谢;)


您可以使用Javascript的
observe
功能

遵循以下示例代码:

var model = {};
Object.observe(model, function(changes){
    changes.forEach(function(change) {
        console.log(change.type, change.name, change.oldValue);
    });
});

您可以使用Object.defineProperty执行此操作,并为您的对象创建自定义getter/setter。在下面的示例中,您看到了一个简单的可观察类,它接受您希望观察的属性数组,并在观察到的属性值更改时调用changed方法

这里它只是一个示例类,因此我可以展示它的原理:)随意更改它

(注:我对代码进行了一些更新,所以它会在按键时做出反应,您可以看到通过;)给出的更改。)

可观察的功能(道具){
如果(!此实例为可观测)
返回新的可观察(道具);
var values={},define=函数(目标、propName、propHolder){
Object.defineProperty(目标、propName、{
get:function(){
归还财产持有人[财产名称];
},
设置:函数(值){
如果(值===propHolder[propName]){
返回;
} 
var oldValue=propHolder[propName];
propHolder[propName]=值;
if(target.changed&&target.changed.apply){
target.changed.apply(target[propName,oldValue,value]);
}
},
可配置:false
});
};
如果(道具){
for(变量i=0,len=props.length;i';
}
log(属性+'从'+oldValue+'更改为'+newValue%);
}
}
var模型=新的可观测值(['value']);
addEventListener('load',function()){
//展示变化
model.value='test';
model.value='sample';
model.value='';
});
函数更新(sourceElement){
var att=sourceElement.getAttribute('data-id'),
mod=sourceElement.getAttribute('data-model');
窗口[mod][att]=sourceElement.value;
}

我只使用了一个方法,将所有内容都更改为framerequest动画中的其他类,谢谢大家


注意:Object.observe不适用于所有NaveGator:'(..@Achu

您正在寻找getter和setter。正如@Bergi所说,您需要提供getter和setter。这些是您用来访问或修改对象属性值的一些方法。如果您总是使用setter修改值,您将能够控制修改的方式。这是面向对象p中的一个很好的实践程序设计。检查这个:这只是一个很小的对象。观察是RIP,看这里:或者这里我无法理解这个:扫描你解释我如何调用这个函数或执行,谢谢我认为这个链接可以帮助你更好地理解这一点。希望它能帮到你。我不是说对输入的更改,这只是一个控制台的更改example@AlbertoAcu尼娜一世在我的示例中,这并不重要,如果您要更改
model.value='test';
它也会打印到控制台,我只是添加了一个示例,这样您就可以很容易地看到更改。我还添加了一个示例,如果您只为它分配一些内容,会发生什么情况
var model = {};
Object.observe(model, function(changes){
    changes.forEach(function(change) {
        console.log(change.type, change.name, change.oldValue);
    });
});