gpt4 book ai didi

javascript - 是否可以在 javascript 中制作自己的自定义 native 对象?

转载 作者:行者123 更新时间:2023-12-01 01:25:58 24 4
gpt4 key购买 nike

是否可以制作自己的自定义 native 对象,如字符串、数字、数组、日期等?

我想创建一个对象来直接使用它的 native 值,我已经阅读了有关 Object.valueOf 以及如何使用它的信息,但它只能用于如果您尝试使用 ajax 发送对象的操作,它将发送整个对象及其原型(prototype),但我不希望这样

假设我有一个电话对象

function Phone(a){
this.value=a;
}

Phone.prototype={
getAreaCode:function(){
return this.value.substr(0,3);
}
}

var a = new Phone('938-358-395');
console.log(a);
//I want the output here to be '938-358-395' instead of Phone{value:'938-358-395'}
// just like how a Date Object would normally go when you do this

var b = new Date();
console.log(b);
//output would be 'Sun Dec 16 2018 20:20:28 GMT+0800 (China Standard Time)')

//as what I've said earlier I want to send it via ajax like this

var c = {
phone1: new Phone('938-358-395'),
phone2: new Phone('938-358-394')
};

//now I want to send c via ajax but the outcome will be
//{phone1: Phone {value:'938-358-395'},phone2: Phone {value:'938-358-394'}}
//what I want is {phone1: '938-358-395', phone2: '938-358-394'}

最佳答案

I want to send c via ajax

答案会有所不同,具体取决于您如何序列化 c 以通过 ajax 发送它,因为您当然需要发送文本

如果您使用 JSON,则可以实现 toJSON 方法,JSON.stringify 将使用该方法:

function Phone(a){
this.value=a;
}

Phone.prototype={
constructor: Phone,
getAreaCode:function(){
return this.value.substr(0,3);
},
toJSON: function() {
return this.value;
}
};

var c = {
phone1: new Phone('938-358-395'),
phone2: new Phone('938-358-394')
};

console.log(JSON.stringify(c));

如果您使用其他序列化,它们可能会导致将 Phone 对象转换为字符串,因此实现 toString 即可:

function Phone(a){
this.value=a;
}

Phone.prototype={
constructor: Phone,
getAreaCode:function(){
return this.value.substr(0,3);
},
toString: function() {
return this.value;
}
};

var c = {
phone1: new Phone('938-358-395'),
phone2: new Phone('938-358-394')
};

// Not just doing String(c), since c doesn't implement toString
console.log(String(c.phone1) + ", " + String(c.phone2));

或者当然,同时实现:

function Phone(a){
this.value=a;
}

Phone.prototype={
constructor: Phone,
getAreaCode:function(){
return this.value.substr(0,3);
},
toJSON: function() {
return this.toString();
},
toString: function() {
return this.value;
}
};

var c = {
phone1: new Phone('938-358-395'),
phone2: new Phone('938-358-394')
};

// Not just doing String(c), since c doesn't implement toString
console.log(String(c.phone1) + ", " + String(c.phone2));
console.log(JSON.stringify(c));

<小时/>

旁注:如果您完全替换构造函数的 prototype 属性,请务必修复 constructor 属性,使其指向正确的函数。请注意我已添加到上面代码片段中的构造函数:Phone

当然,在2018年(接近2019年),如果需要支持旧浏览器,可以使用class语法,进行转译:

class Phone {
constructor(a) {
this.value = a;
}
getAreaCode() {
return this.value.substr(0, 3);
}
toJSON() {
return this.toString();
}
toString() {
return this.value;
}
}

关于javascript - 是否可以在 javascript 中制作自己的自定义 native 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53802161/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com