How to use Object.defineProperties()?
Below I am trying to define properties of an object using defineProperties function, but I am getting unexpected outcome when I print last line in this script. I expect 2005 to be logged at console, but I keep getting 2004. Same applies to other properties, like edition. Am I using this defineProperties
function incorrectly?
var book = {};
Object.defineProperties(book, {
_year: {
value: 2004
},
edition: {
value: 1
},
year: {
get: function() {
return this._year;
},
set: function(newValue) {
if (newValue > 2004) {
this._year = newValue;
this.edition += newValue - 2004;
}
}
}
});
console.log(book);
console.log(book.year);
book.year = 2005;
console.log(book);
console.log(book.year);
javascript
add a comment |
Below I am trying to define properties of an object using defineProperties function, but I am getting unexpected outcome when I print last line in this script. I expect 2005 to be logged at console, but I keep getting 2004. Same applies to other properties, like edition. Am I using this defineProperties
function incorrectly?
var book = {};
Object.defineProperties(book, {
_year: {
value: 2004
},
edition: {
value: 1
},
year: {
get: function() {
return this._year;
},
set: function(newValue) {
if (newValue > 2004) {
this._year = newValue;
this.edition += newValue - 2004;
}
}
}
});
console.log(book);
console.log(book.year);
book.year = 2005;
console.log(book);
console.log(book.year);
javascript
The default value for thewritable
flag isfalse
. You have to explicitly set it totrue
. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
– Felix Kling
Nov 13 '18 at 19:13
add a comment |
Below I am trying to define properties of an object using defineProperties function, but I am getting unexpected outcome when I print last line in this script. I expect 2005 to be logged at console, but I keep getting 2004. Same applies to other properties, like edition. Am I using this defineProperties
function incorrectly?
var book = {};
Object.defineProperties(book, {
_year: {
value: 2004
},
edition: {
value: 1
},
year: {
get: function() {
return this._year;
},
set: function(newValue) {
if (newValue > 2004) {
this._year = newValue;
this.edition += newValue - 2004;
}
}
}
});
console.log(book);
console.log(book.year);
book.year = 2005;
console.log(book);
console.log(book.year);
javascript
Below I am trying to define properties of an object using defineProperties function, but I am getting unexpected outcome when I print last line in this script. I expect 2005 to be logged at console, but I keep getting 2004. Same applies to other properties, like edition. Am I using this defineProperties
function incorrectly?
var book = {};
Object.defineProperties(book, {
_year: {
value: 2004
},
edition: {
value: 1
},
year: {
get: function() {
return this._year;
},
set: function(newValue) {
if (newValue > 2004) {
this._year = newValue;
this.edition += newValue - 2004;
}
}
}
});
console.log(book);
console.log(book.year);
book.year = 2005;
console.log(book);
console.log(book.year);
var book = {};
Object.defineProperties(book, {
_year: {
value: 2004
},
edition: {
value: 1
},
year: {
get: function() {
return this._year;
},
set: function(newValue) {
if (newValue > 2004) {
this._year = newValue;
this.edition += newValue - 2004;
}
}
}
});
console.log(book);
console.log(book.year);
book.year = 2005;
console.log(book);
console.log(book.year);
var book = {};
Object.defineProperties(book, {
_year: {
value: 2004
},
edition: {
value: 1
},
year: {
get: function() {
return this._year;
},
set: function(newValue) {
if (newValue > 2004) {
this._year = newValue;
this.edition += newValue - 2004;
}
}
}
});
console.log(book);
console.log(book.year);
book.year = 2005;
console.log(book);
console.log(book.year);
javascript
javascript
edited Nov 13 '18 at 19:10
Felix Kling
550k126858913
550k126858913
asked Nov 13 '18 at 19:09
MohitMohit
1238
1238
The default value for thewritable
flag isfalse
. You have to explicitly set it totrue
. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
– Felix Kling
Nov 13 '18 at 19:13
add a comment |
The default value for thewritable
flag isfalse
. You have to explicitly set it totrue
. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
– Felix Kling
Nov 13 '18 at 19:13
The default value for the
writable
flag is false
. You have to explicitly set it to true
. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…– Felix Kling
Nov 13 '18 at 19:13
The default value for the
writable
flag is false
. You have to explicitly set it to true
. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…– Felix Kling
Nov 13 '18 at 19:13
add a comment |
1 Answer
1
active
oldest
votes
You defined _year
as read only, so this._year = newValue
fails (silently). You need to make it writable.
_year: {
value: 2004,
writable: true
},
Same foredition
.
– Felix Kling
Nov 13 '18 at 19:13
Dang, missed that. Thank you guys.
– Mohit
Nov 13 '18 at 19:14
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53287953%2fhow-to-use-object-defineproperties%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You defined _year
as read only, so this._year = newValue
fails (silently). You need to make it writable.
_year: {
value: 2004,
writable: true
},
Same foredition
.
– Felix Kling
Nov 13 '18 at 19:13
Dang, missed that. Thank you guys.
– Mohit
Nov 13 '18 at 19:14
add a comment |
You defined _year
as read only, so this._year = newValue
fails (silently). You need to make it writable.
_year: {
value: 2004,
writable: true
},
Same foredition
.
– Felix Kling
Nov 13 '18 at 19:13
Dang, missed that. Thank you guys.
– Mohit
Nov 13 '18 at 19:14
add a comment |
You defined _year
as read only, so this._year = newValue
fails (silently). You need to make it writable.
_year: {
value: 2004,
writable: true
},
You defined _year
as read only, so this._year = newValue
fails (silently). You need to make it writable.
_year: {
value: 2004,
writable: true
},
answered Nov 13 '18 at 19:12
QuentinQuentin
645k718701038
645k718701038
Same foredition
.
– Felix Kling
Nov 13 '18 at 19:13
Dang, missed that. Thank you guys.
– Mohit
Nov 13 '18 at 19:14
add a comment |
Same foredition
.
– Felix Kling
Nov 13 '18 at 19:13
Dang, missed that. Thank you guys.
– Mohit
Nov 13 '18 at 19:14
Same for
edition
.– Felix Kling
Nov 13 '18 at 19:13
Same for
edition
.– Felix Kling
Nov 13 '18 at 19:13
Dang, missed that. Thank you guys.
– Mohit
Nov 13 '18 at 19:14
Dang, missed that. Thank you guys.
– Mohit
Nov 13 '18 at 19:14
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53287953%2fhow-to-use-object-defineproperties%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
The default value for the
writable
flag isfalse
. You have to explicitly set it totrue
. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…– Felix Kling
Nov 13 '18 at 19:13