标签: ecmascript-5

使用 Object.defineProperties 给出两个属性

我正在尝试创建一个对象。但我不明白为什么我的属性 getters setters 不能简单地调用this.bar. 因此,我的 foo 对象似乎最终有两个属性。

这是正确的还是我:

  1. 使用defineProperties错误
  2. 没有抓住要点

foobar属性创建

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)

javascript properties ecmascript-5

2
推荐指数
1
解决办法
2024
查看次数

将 getter 和 setter 与 Object.defineProperty 一起使用

我想使用 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() 将数据属性转换为访问器属性?

javascript ecmascript-5

2
推荐指数
1
解决办法
8297
查看次数

ES6中如何导入?

我该如何翻译var exec = require('child_process').exec;到ES6?我知道以下几点:import exec from 'child_process';

我不知道如何.exec在 ES6 语法末尾添加 the 。

javascript ecmascript-5 ecmascript-6

2
推荐指数
1
解决办法
2919
查看次数

JavaScript:为什么控制台不被视为标准的内置对象?

console不包括在列表中,但几乎可以在任何环境中使用。

附带说明一下,为什么console不像其他内置全局对象那样大写,例如NumberArray

javascript ecmascript-5 ecmascript-6

2
推荐指数
1
解决办法
366
查看次数

如何检查对象及其属性是否存在?

我从 API 调用收到一个对象。我想检查:

  1. 如果对象存在
  2. 对象的属性是否具有我正在寻找的属性

假设我期待以下对象:

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

有没有任何现代和快速的方法来检查这个?

javascript ecmascript-5 ecmascript-6

2
推荐指数
1
解决办法
864
查看次数

Object.create和继承

以下示例中的结果对象之间有什么区别:

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构造函数中设置任何属性,但是还有其他有意义的区别吗?

javascript inheritance node.js ecmascript-5 object-create

1
推荐指数
1
解决办法
324
查看次数

在javascript中使用按位OR转换为整数

我们可以做以下转换:

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功能.有没有人知道这是否可以安全地用于将字符串和小数转换为整数?

javascript string integer bit-manipulation ecmascript-5

1
推荐指数
1
解决办法
1623
查看次数

JS getters:defineProperty是否替换或补充较旧的内联"get"'set'语法?

内联,对象文字'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

1
推荐指数
1
解决办法
553
查看次数

Node.js中的Object.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,它失败并输出空白对象{}

这里可能是什么问题?

javascript ecmascript-5 ecmascript-6

1
推荐指数
1
解决办法
544
查看次数

为什么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)

为什么程序会抛出该错误?标签只用于循环吗?

html javascript ecmascript-5 ecmascript-6

1
推荐指数
1
解决办法
35
查看次数