为什么我不能改变一个字符串的原型
Why can I not change the prototype of a string?
假设我们有以下代码,由于某种原因,我想固执地将 a
, b
和 c
的原型更改为 Obj
的原型。
问题:为什么对象和数组接受原型的改变,而字符串不接受?
var Obj = function() {}
Obj.prototype = {
log: function(s) {
console.log(s);
}
}
var
a = {1110: "1110"},
b = [1110],
c = "1110";
Object.setPrototypeOf(a, Obj.prototype);
Object.setPrototypeOf(b, Obj.prototype);
Object.setPrototypeOf(c, Obj.prototype);
a.log("shuh");
b.log("shuh");
c.log("shuh");
这是因为"1110"
不是一个对象,而是一个基本的string
类型。所以它没有原型的概念
你不能改变字符串原语的原型,因为只有对象有[[SetPrototypeOf]]内部方法。这是有道理的,因为原型决定了属性的继承,但原始值没有属性,既不是自己的,也不是继承的。
但是,您仍然可以更改字符串对象的原型:
var Obj = function() {}
Obj.prototype = {
log: function(s) {
console.log(s);
}
};
var a = {1110: "1110"},
b = [1110],
c = new String("1110");
Object.setPrototypeOf(a, Obj.prototype);
Object.setPrototypeOf(b, Obj.prototype);
Object.setPrototypeOf(c, Obj.prototype);
a.log("shuh");
b.log("shuh");
c.log("shuh");
可以为Object添加日志方法。原型和所有对象都会有它。这样,你就不必为你的对象、数字和字符串创建单独的日志原型……下面是一个这样做的例子
'use strict'
console.clear()
Object.prototype.log = function(s) {
console.log(s);
}
var
a = {1110: "1110"},
b = [1110],
c = "1110";
a.log("shuh");
b.log("shuh");
c.log("shuh");
相关文章:
- NodeJS在一个较大的字符串中获取一个字符串的索引
- Javascript:用while循环在给定的count参数中重复一个字符串
- 如何使用另一个字符串作为模板从字符串中提取数据
- 如何检查一个字符串的所有字符是否都存在于另一个字符串中
- 从表单中动态生成一个字符串,传递给通过AJAX加载的PHP文件
- 我可以使用JS一次使用JSON数组中的一个字符串吗
- 将字符串转换为数组使用javascript更新一个值并返回一个字符串
- 如何在JavaScript中每隔第n个字符分割一个字符串
- 我需要使用什么语法来向一个对象的成员添加一个临时数组,该成员等同于一个字符串的通用列表
- 使用Jquery从所有元素创建一个字符串
- 在Javascript中截断一个字符串,混淆了最后两个测试字符串
- Javascript使用本地存储,回调对象并用Json更改为一个字符串以用于填充函数
- 将一个字符串数组解析为一个新的数组javascript
- 我可以在两个javascript文件之间传递一个字符串吗?
- 如何拆分一个字符串,然后将它们与另一个字符串匹配
- get没有方法“writefile”,即使输入是一个字符串
- 将 url 中的一个字符串替换为另一个字符串
- 如何在 javascript 中使用正则表达式在其他两个字符串之间找到一个字符串
- “JSON.parse(str)”返回“意外令牌c”,但str是一个字符串
- 递归查找嵌套数组中的最后一个字符串