标签: javascript-objects

访问者属性出错:无法重新定义不可配置的属性"status"

我正在尝试定义一个对象并为其创建一个访问器属性.

HTML:

<input type='hidden' id='crudMode' value='Create' />
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

crudMode = {
   create: "Create",
   read: "Read",
   update: "Update",
   delete: "Delete",
   current: function () { return $('#crudMode').val(); }
}

Object.defineProperty(crudMode, 'mode', {
    get: function(){
        return this.current();
    },
    set: function(value){ 
        $('#crudMode').val(value);
    }
});
Run Code Online (Sandbox Code Playgroud)

但是当我使用它时,它会在问题标题中引发提到的错误:

console.log(crudMode.mode);
Run Code Online (Sandbox Code Playgroud)

抛出:

TypeError:无法重新定义不可配置的属性"mode"

这有什么不对?

javascript properties javascript-objects defineproperty

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

这个生成的代码应该是什么(打算)做什么的?

我在自动生成的javascript文件中看到了这个:

function map(x){
    x={x:x};
    delete x.x;
    return x
}
Run Code Online (Sandbox Code Playgroud)

我的结论是用于创建一个对象,但为什么要以这种方式创建它?这是一种模式吗?

UPDATE

更多信息,创建此代码的工具是来自Google的dart2js,代码用于此上下文:

(function (reflectionData) {
  function map(x){x={x:x};delete x.x;return x}
  if (!init.libraries) init.libraries = [];
  if (!init.mangledNames) init.mangledNames = map();
  if (!init.mangledGlobalNames) init.mangledGlobalNames = map();
  if (!init.statics) init.statics = map();
  if (!init.interfaces) init.interfaces = map();
Run Code Online (Sandbox Code Playgroud)

javascript javascript-objects

14
推荐指数
3
解决办法
657
查看次数

与lodash深度比较的对象数组

我有两个与我深深比较的对象阵列 lodash

但是,我有一个问题:

> var x = [{a:1, b:2}, {c:3, d:4}];
> var y = [{b:2, a:1}, {d:4, c:3}];
> _.difference(x,y, _.isEqual);
[ { a: 1, b: 2 }, { c: 3, d: 4 } ]
Run Code Online (Sandbox Code Playgroud)

我应该如何比较看两者是否相等?

javascript arrays javascript-objects lodash

14
推荐指数
3
解决办法
2万
查看次数

如何找到两个JavaScript对象数组之间的差异?

我有两个JavaScript数组orig(原始对象数组)和update(更新的对象的orig数组),它们具有相同的长度并包含对象,我想输出每对对象之间的差异.

例:

var orig = [{enabled:"true", name:"Obj1", id:3},{enabled:"true", name:"Obj2", id:4}]; 

var update = [{enabled:"true", name:"Obj1", id:3}, {enabled:"true", name:"Obj2-updated", id:4}];
Run Code Online (Sandbox Code Playgroud)

输出应该是: name:"Obj2-updated"

我实现了一些东西,但它需要优化......

for(var prop=0; prop<orig.length; prop++) {
  for(prop=0; prop<update.length; prop++) {
    if(orig[prop].enabled != update.enabled) { console.log(update.enabled) }
    if(orig[prop].name != update[prop].name) { console.log(update[prop].name) }
    if(orig[prop].id != update[prop].id) { console.log(update[prop].id) }
  }
}
Run Code Online (Sandbox Code Playgroud)

javascript arrays data-manipulation javascript-objects difference

14
推荐指数
2
解决办法
7027
查看次数

Object.create的用例(null)

我明白使用Object.create(null)创建一个没有proto属性的对象(即Object.getPrototypeOf( myObj ) === null)但有人可以帮助我理解这个用例是什么?

换句话说,为什么要创建一个完全为空的对象(即不从中继承任何方法Object.prototype)?

javascript prototype javascript-objects

13
推荐指数
2
解决办法
321
查看次数

如何在javascript中对这个对象数组进行分组或合并?

我有一个像下面这样的对象数组.

{name: "Mc Donald", quantity: 4, maleCount: 1, femaleCount: 0}
{name: "KFC", quantity: 9, maleCount: 1, femaleCount: 0}
{name: "KFC", quantity: 9, maleCount: 1, femaleCount: 0}
{name: "Mc Donald", quantity: 4, maleCount: 0, femaleCount: 1}
{name: "KFC", quantity: 9, maleCount: 0, femaleCount: 1}
{name: "KFC", quantity: 9, maleCount: 1, femaleCount: 0}
{name: "KFC", quantity: 9, maleCount: 0, femaleCount: 1}
{name: "KFC", quantity: 9, maleCount: 0, femaleCount: 1}
Run Code Online (Sandbox Code Playgroud)

我想将它们分组并将其中的所有值相加.例如,决赛将是这样的:

{name: "Mc Donald", quantity: 8, maleCount: 1, femaleCount: 1}
{name: "KFC", quantity: …
Run Code Online (Sandbox Code Playgroud)

javascript arrays grouping javascript-objects

13
推荐指数
3
解决办法
1841
查看次数

IE8中的JavaScript getter支持

看看这段代码.这是一个非常简单的JavaScript对象,它使用Module Pattern实现(你可以看到这个小提琴地址的实例)

var human = function() {
    var _firstName = '';
    var _lastName = ''
    return {
        get firstName() {
            return _firstName;
        }, get lastName() {
            return _lastName;
        }, set firstName(name) {
            _firstName = name;
        }, set lastName(name) {
            _lastName = name;
        }, get fullName() {
            return _firstName + ' ' + _lastName;
        }
    }
}();
human.firstName = 'Saeed';
human.lastName = 'Neamati';
alert(human.fullName);
Run Code Online (Sandbox Code Playgroud)

但是,IE8不支持JavaScript getset关键字.您可以测试它并查看MDN.

我该怎么做才能使这个脚本与IE8兼容?

javascript getter setter internet-explorer-8 javascript-objects

12
推荐指数
3
解决办法
1万
查看次数

用另一个对象替换一个javascript对象

在页面加载,我创建了两个JavaScript对象,objDemo1objDemo1Backup其中后者仅仅是第一的精确副本.

例如

objDemo1 { 
    sub_1 = { something: 123, somethingElse: 321 },
    sub_2 = { something: 456, somethingElse: 654 }
}
Run Code Online (Sandbox Code Playgroud)

我可以修改值sub_以及添加/删除新sub_的但是我正在编辑的唯一对象是objDemo1.即我永远不会改变objDemo1Backup

我有一个重置按钮,单击该按钮将重置objDemo1为最初加载页面时的状态(即objDemo1 = objDemo1Backup).这是我遇到问题的地方..

如何设置objDemo1objDemo1Backup

我试过了:

objDemo1 = objDemo1Backup;
Run Code Online (Sandbox Code Playgroud)

objDemo1 = null;
var objDemo1 = objDemo1Backup;
Run Code Online (Sandbox Code Playgroud)

...以及类似的变化,但似乎没有任何工作.有任何想法吗?

  • 注意:我可以确认,在重置时,objDemo1Backup它与我创建它并objDemo1更改时完全相同.
  • 我的代码肯定会达到"重置"功能,我已经尝试了objDemo1 = objDemo1Backup...我只是无法弄清楚替换对象的语法.

javascript reset javascript-objects

12
推荐指数
2
解决办法
2万
查看次数

什么是JavaScript的Object.prototype行为?

我遇到了一段奇怪的代码片段,我根本无法理解,这里是:

var obj = function() {};
obj.prototype.x = 5;

var instance1 = new obj();

obj.prototype = {y: 6};

var instance2 = new obj();

console.log(instance1.x, instance1.y, instance2.x, instance2.y);
// 5, undefined, undefined, 6
Run Code Online (Sandbox Code Playgroud)

现在,问题是:

  1. 为什么这个日志记录5, undefined, undefined, 6而不是undefined, 6, undefined, 6
  2. 为什么替换原型并不像通常那样改变对象的所有实例的原型?
  3. 在此代码中,V8引擎一步一步地做什么?
  4. 编辑:我将如何改变所有实例的原型?

每个解释都表示赞赏.

javascript prototype object javascript-objects

12
推荐指数
2
解决办法
999
查看次数

如何从angularjs中的JavaScript数组中删除重复的对象?

这是我的代码

var studentsList = [
    {"Id": "101", "name": "siva"},
    {"Id": "101", "name": "siva"},
    {"Id": "102", "name": "hari"},
    {"Id": "103", "name": "rajesh"},
    {"Id": "103", "name": "rajesh"},
    {"Id": "104", "name": "ramesh"},
];

function arrUnique(arr) {
    var cleaned = [];
    studentsList.forEach(function(itm) {
        var unique = true;
        cleaned.forEach(function(itm2) {
            if (_.isEqual(itm, itm2)) unique = false;
        });
        if (unique)  cleaned.push(itm);
    });
    return cleaned;
}

var uniqueStandards = arrUnique(studentsList);

document.body.innerHTML = '<pre>' + JSON.stringify(uniqueStandards, null, 4) + '</pre>';
Run Code Online (Sandbox Code Playgroud)

产量

[
{
    "Id": "101",
    "name": "siva"
}, …
Run Code Online (Sandbox Code Playgroud)

javascript javascript-objects

12
推荐指数
2
解决办法
3万
查看次数