전방에서 어떻게 데이터의 양방향 귀속을 실현합니까
Object.defineProperty는 ES5의 방법입니다. 대상에 새로운 속성을 직접 정의하거나, 대상의 기존 속성을 수정하고, 이 대상을 되돌려줍니다.
구문:
Object.defineProperty(obj, prop, descriptor)
매개변수:
obj에서 속성을 정의할 대상입니다.prop에서 정의하거나 수정할 속성의 이름입니다.descriptor에서 정의되거나 수정될 속성 설명자입니다.descriptor는 다음과 같은 속성을 포함할 수 있습니다. 기본적으로 writable,enumerable,configurable 값은false입니다.
value: 속성의 값 writable:false라면 속성의 값을 다시 쓸 수 없고 읽기만 할 수 있습니다.enumerable: 일일이 열거할 수 있는지, for에서 열거할 수 있는지...in 순환에 겹치거나 Object에 있습니다.키스에서 열거해.configurable:false라면 그의 (value, writable, configurable) 를 다시 설정할 수 없습니다.액세스 설명자에는 다음 옵션 키 값도 있습니다.
get은 속성에 getter를 제공하는 방법입니다. getter가 없으면 undefined입니다.이 속성에 접근할 때 이 방법은 실행됩니다. 방법이 실행될 때 파라미터가 들어오지 않지만,this 대상에 들어갑니다
(상속 관계로 인해this는 반드시 이 속성을 정의하는 대상이 아니다.
기본값은 undefined입니다.
set은 속성에 setter를 제공하는 방법입니다. setter가 없으면 undefined입니다.속성 값이 수정되면 이 방법을 실행합니다.이 방법은 유일한 매개 변수, 즉 이 속성의 새로운 매개 변수 값을 받아들일 것이다.
기본값은 undefined입니다.
demo:
1. 데이터 변경 불가
`var a= {}
Object.defineProperty(a,"b",{
value:111
})
console.log(a.b);//111
a.b=3
console.log(a.b);//111`
2. 데이터 변경 가능
` var a= {}
Object.defineProperty(a,"b",{
value:111,
writable:true
})
console.log(a.b);//111
a.b=3
console.log(a.b);//3`
3. 일일이 열거할 수 없다
`Object.defineProperty(a,"b",{
value:"save", writable:true
})
Object.defineProperty(a,"c",{
value:222, writable:true
})
console.log(Object.keys(a)); // []`
4. 열거 가능
`Object.defineProperty(a,"b",{
value:"save", writable:true, enumerable:true
})
Object.defineProperty(a,"c",{
value:222, writable:true, enumerable:true
})
console.log(Object.keys(a)); // (2) ["c", "b"]
for...in Object.keys `
5.s 속성은 구성 변경 불가
`Object.defineProperty(a,"s",{
value:888, writable:true, enumerable:true, configurable:false
})`
6.s 속성의 writable:false는 다시 정의할 수 있습니다
`Object.defineProperty(a,"s",{
value:888, writable:false, enumerable:true, configurable:false
})`
7.s 속성의 writable가false로 설정된 것을 제외하고 defineProperty 변수는 다시 정의할 수 있으며 다른value,enumerable,\configurable는 다른 내용을 변경할 수 없습니다
`Object.defineProperty(a,"s",{
value:888, writable:false, enumerable:true, configurable:false
})`
8.set, get 속성 설정value와 writable를 설정하면 오류가 발생합니다. 다른 속성은 상관없습니다. configurable가false인 후 get은 set 이후에 변경할 수 없습니다.
` Object.defineProperty(a,"s",{
enumerable:true, configurable:false,get:function(){return this.value},set:function(newdata){ this.value=newdata}
})`
9. 상속 속성:
만약 방문자의 속성이 계승된다면 get과 set 방법은 하위 대상의 속성이 접근하거나 수정될 때 호출됩니다.이러한 방법을 변수로 저장하면 모든 객체가 이 값을 공유합니다.
`
function myclass() {
}
var value;
Object.defineProperty(myclass.prototype, "x", {
get() {
return value;
},
set(x) {
value = x;
}
});
var a = new myclass();
var b = new myclass();
a.x = 1;
console.log(b.x); // 1`
이것은 값을 다른 속성에 저장해서 고정시킬 수 있다.get과 set 방법에서this는 접근하고 속성을 수정하는 대상을 가리킨다.
`function myclass() {
}
Object.defineProperty(myclass.prototype, "x", {
get() {
return this.stored_x;
},
set(x) {
this.stored_x = x;
}
});
var a = new myclass();
var b = new myclass();
a.x = 1;
console.log(b.x); // undefined`
방문자 속성과 달리 값 속성은 항상 대상 자체에 설정되며 원형이 아니다.그러나 쓰기 불가능한 속성이 계승되면 대상의 속성을 수정하는 것을 방지할 수 있습니다.
`function myclass() {
}
myclass.prototype.x = 1;
Object.defineProperty(myclass.prototype, "y", {
writable: false,
value: 1
});
var a = new myclass();
a.x = 2;
console.log(a.x); // 2
console.log(myclass.prototype.x); // 1
a.y = 2; // Ignored, throws in strict mode
console.log(a.y); // 1
console.log(myclass.prototype.y); // 1`
양방향 데이터 바인딩 데모:
`"demo"/>
const dataDemo = {};
const demo = document.getElementById('demo');
Object.defineProperty(dataDemo, 'content', {
set(value) {
demo.value = value;
this.value = value;
},get(value){ return this.value;}
});
demo.onchange = function(e) {
dataDemo.content = this.value;
}
console.log(dataDemo.content);
dataDemo.content=" " //input `
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.