我正在尝试创建一个对象。但我不明白为什么我的属性 getters setters 不能简单地调用this.bar. 因此,我的 foo 对象似乎最终有两个属性。
这是正确的还是我:
foo用bar属性创建
var foo = function ()
{
Object.defineProperties(this, {
bar : {
get : function () {return this.barVal},
set : function(value) { this.barVal = value},
enumerable: true,
configurable: true
}
})
};
var o = new foo();
o.bar = "Hello";
console.log(JSON.stringify(o));
//output {"bar":"Hello","barVal":"Hello"}
Run Code Online (Sandbox Code Playgroud) 我想使用 Object.defineProperty() 将数据属性转换为访问器属性。考虑导致Uncaught RangeError: Maximum call stack size exceeded错误的代码
var c = { name: 'abcde'};
Object.defineProperty(c, 'name', {
get: function() {
return this.name; //causes stack overflow
},
set: function(x) {
this.name = x; //causes stack overflow
}
});
c.name="xyz";
console.log(c.name);
Run Code Online (Sandbox Code Playgroud)
我明白为什么会出现错误。建议的解决方案之一是从 getter 和 setter 中删除“this”,它似乎有效。
var c = { name: 'abcde'};
Object.defineProperty(c, 'name', {
get: function() {
return name; //removed this
},
set: function(x) {
name = x; //removed this
}
});
c.name="xyz";
console.log(c.name);
Run Code Online (Sandbox Code Playgroud)
怎么了 ?一般来说,我想问如何使用 Object.defineProperty() 将数据属性转换为访问器属性?
我该如何翻译var exec = require('child_process').exec;到ES6?我知道以下几点:import exec from 'child_process';
我不知道如何.exec在 ES6 语法末尾添加 the 。
console不包括在列表中,但几乎可以在任何环境中使用。
附带说明一下,为什么console不像其他内置全局对象那样大写,例如Number或Array?
我从 API 调用收到一个对象。我想检查:
假设我期待以下对象:
success.response.data.users.items.list
Run Code Online (Sandbox Code Playgroud)
现在我想知道这个list对象是否存在。
我试过了:
typeof success.response.data.users.items.list !== "undefined"
我得到的错误: TypeError: Cannot read property 'data' of undefined
success.hasOwnProperty("response.data.users.items.list")
这始终评估为 false,因为 hasOwnProperty 显然无法检查多级对象。
success.response.data.users.items.hasOwnProperty("list")
我得到的错误: TypeError: Cannot read property 'data' of undefined
有没有任何现代和快速的方法来检查这个?
以下示例中的结果对象之间有什么区别:
var EventEmitter = require('events').EventEmitter;
var oProto = Object.create(EventEmitter.prototype);
var oProto2 = Object.create(oProto);
var oConstr = Object.create(new EventEmitter);
var oConstr2 = Object.create(oConstr);
Run Code Online (Sandbox Code Playgroud)
我想oConstr并且oConstr2将在EventEmitter构造函数中设置任何属性,但是还有其他有意义的区别吗?
我们可以做以下转换:
var a = "129.13"|0, // becomes 129
var b = 11.12|0; // becomes 11
var c = "112"|0; // becomes 112
Run Code Online (Sandbox Code Playgroud)
这似乎有效,但不确定这是否是标准的JS功能.有没有人知道这是否可以安全地用于将字符串和小数转换为整数?
内联,对象文字'get function()'样式和Object.defineProperty之间的功能似乎有重叠.
MDN docs for get https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/get没有提到内联'get'函数已被弃用.
var john = {
firstName: 'John',
lastName: 'Smith',
age: 21,
gender: 'Male'
// () ? String
// Returns the full name of object.
get name() {
return this.firstName + ' ' + this.lastName
},
// (new_name:String) ? undefined
// Sets the name components of the object,
// from a full name.
set name(new_name) {
var names = new_name.trim().split(/\s+/)
this.firstName = names['0'] || ''
this.lastName = names['1'] || ''
},
}
Run Code Online (Sandbox Code Playgroud)
Mozilla的Jeff Walden在2010年(似乎是)的文章中说: …
javascript properties getter-setter ecmascript-5 defineproperty
我正在浏览器控制台以及node.js v9.11.1终端中运行以下代码:
let name = {};
Object.defineProperty(name, 'last', {value: 'Doe'});
console.log(name);
Run Code Online (Sandbox Code Playgroud)
浏览器控制台正常工作并输出{ last: 'Doe' }。但是在with的终端中node.js,它失败并输出空白对象{}。
这里可能是什么问题?
我在这里写了一个小JS代码.哪个运行没有任何错误
repeat:
while(true){
console.log('Start');
break repeat;
console.log('End');
}Run Code Online (Sandbox Code Playgroud)
但是当我不使用while语句时,程序会抛出错误 Undefined label repeat
repeat:
console.log('Start');
break repeat;
console.log('End');Run Code Online (Sandbox Code Playgroud)
为什么程序会抛出该错误?标签只用于循环吗?
ecmascript-5 ×10
javascript ×10
ecmascript-6 ×5
properties ×2
html ×1
inheritance ×1
integer ×1
node.js ×1
string ×1