JS为一个深层对象添加属性并不生效(再次获取显示"undefined"), 是什么原因?
需求
想要向blob对象中添加一个name
属性, 并返回这个blob对象
现在的对象结构:
re = {
response(一个blob对象),
其他属性...
}
尝试的方法
//不可行
re.response.name = 'helloworld';
return re.response;
//不可行
var blob = re.response;
blob.name = 'helloworld';
return re.response;
//可行
var blob = re.response;
blob.name = 'helloworld';
return blob;
主要是这里有疑惑, blob
和re.response
难道不是指向的同一个对象吗? 为什么对他们两个进行赋值和获取, 还有区别
我又写了一个demo, 想要复现问题, 结果他又正常运行了
var blob = new Blob(['helloworld']);
var obj = {b:blob};
blob.name = 'filename';
console.log(obj.b.name); //filename
console.log(blob == obj.b); //true
问题代码及运行效果
/**
* 返回blob
* @param {string} url
*/
function GMFetch(url){
return new Promise((resolve)=>{
GM_xmlhttpRequest({
url : url,
responseType: 'blob',
onload : function(re){
console.log(re);
var blob = re.response; //TODO 此处必须先获取到blob对象再赋值
blob.name = getFileName(url);
console.log(re);
console.log(blob);
console.log(re.constructor );
console.log(re.response.constructor );
console.log(blob.constructor );
console.log(re.response == blob);
console.log('获取到请求响应'+re.response.size);
console.log('获取到请求响应'+re.response.name);
resolve(re.response);
},
onerror:function(){
console.log('请求失败:'+url);
}
});
}).then((blob)=>{return blob});
}
控制台打印:
原始代码是一个油猴脚本:
https://greasyfork.org/zh-CN/...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这里好像有拼写错误。
我不知道你用了什么 ajax 库,但是这个
response
貌似不是re
的属性。是不是getter
啊?