如何制作这样的数据类型

时间:2017-11-24 02:52:28

标签: javascript function

如果我跑

"string".toUpperCase();

代码应返回

STRING

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

myFunction("args");

我如何创建一个与.toUpperCase()

相同的函数

3 个答案:

答案 0 :(得分:1)

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

let foo = {
  bar() {

  }
};

foo.bar()

或者你可以间接地在对象的原型上存储一个。

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

let foo = "string";
foo.bar(); // "my string"

将方法添加到现有原型(猴子修补)通常被认为是一个坏主意,但在实现原型继承时经常使用定义带有方法的新原型。

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

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

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

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

答案 1 :(得分:0)

这是您的解决方案;

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

>>> "hello".myfunction()
"HELLO"

答案 2 :(得分:0)

这是reference

格式类似于Class.method()

在您的示例"string".toUpperCase();上,“字符串”由String类:)包装,因为它是 primitive

.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);