Javascript 如何生成这样的数据类型

Javascript 如何生成这样的数据类型,javascript,function,Javascript,Function,如果我跑 "string".toUpperCase(); 代码应该返回 STRING 这是如何工作的,据我所知,函数只能这样调用 myFunction("args"); 我如何创建一个调用方法与.toUpperCase()相同的函数这是您的解决方案 String.prototype.myfunction = function () { return this.toUpperCase(); } >>> "hello".myfunction() "HELLO" 这是一

如果我跑

"string".toUpperCase();
代码应该返回

STRING
这是如何工作的,据我所知,函数只能这样调用

myFunction("args");
我如何创建一个调用方法与
.toUpperCase()
相同的函数这是您的解决方案

String.prototype.myfunction = function () {
  return this.toUpperCase();
}

>>> "hello".myfunction()
"HELLO"
这是一本书

格式类似于
Class.method()

在您的示例中,
“string”.toUpperCase()string
Class:)包装,因为它是一个字符串

.method()
就是他们有时所称的函数

实际上,在浏览器上,当您定义以下内容时:

function happy(){
    console.log("learning");
}
你把它叫做happy()
,它相当于window.happy()。在web控制台上尝试验证

以下是上述参考文献中的示例

class Rectangle {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }

  get area() {
    return this.calcArea();
  }

  calcArea() {
    return this.height * this.width;
  }
}

const square = new Rectangle(10, 10);

console.log(square.area);

可以将函数直接存储在对象上

let foo = {
  bar() {

  }
};

foo.bar()
或者,您也可以将其间接存储在对象的原型上

String.prototype.bar = function() {
  return "my " + this;
}

let foo = "string";
foo.bar(); // "my string"
向现有原型添加方法(monkey patching)通常被认为是一个坏主意,但在实现原型继承时,通常使用方法定义新原型

function Vehicle() {
  this.fuel = 100;
}

Vehicle.prototype.drive = () => {
  this.fuel -= 1;
}

let car = new Vehicle();
let train = new Vehicle();

car.drive();
train.drive();

您正在使用的方法存在于
字符串
函数的原型中。您需要阅读JS中原型和构造函数的工作原理。例如:
函数Greeter(greeting){this.greeting=greeting;};Greeter.prototype.greet=函数(名称){返回this.greeting+“”+name+“!”;}
。现在您可以执行以下操作:
new Greeter(“Hello”).greet(“chaps”)
并获得
“Hello chaps!”
。不,我的意思是创建一个函数,在调用时以类似str.toUpperCase的方式调用,具有
arg.myfunction
而不是
myfunction(arg)
字符串是字符串类Mm的一个实例。不完全是<代码>字符串的“字符串”实例
false
。不要混淆原语和它们的包装器对象。(
newstring(“String”)
!=
String(“String”)
)。@bowhart哇,谢谢你。因此,
包装器
用于访问
原语
?您能建议怎么说吗?:)原语通常用于访问包装器。但是您可以显式地创建一个包装器,并使用
wrapper.valueOf()
获取底层原语(例如
newstring(“String”).valueOf()
)。当然,您可以说“String”是由
String
对象包装的字符串原语。从技术上讲,原语没有属性或方法,但JavaScript会在必要时临时将原语强制到其包装器对象(例如
“string”.toUpperCase()
创建一个字符串原语,将其强制到其包装器对象,并访问
.toUpperCase())
返回新字符串原语的对象上的方法)。