返回JavaScript类值而不是对象引用

时间:2015-03-31 14:28:12

标签: javascript

我想知道是否有一种方法可以默认返回JS类的值,而不是引用类对象本身。比方说,我想包装一个字符串..

var StringWrapper = function(string) {
    this.string = string;
};

StringWrapper.prototype.contains = function (string) {
    if (this.string.indexOf(string) >= 0)
        return true;
    return false;
};

var myString = new StringWrapper("hey there");

if(myString.contains("hey"))
   alert(myString); // should alert "hey there"

if(myString == "hey there") // should be true
   doSomething();

现在我只想使用string而不是myString来获取myString.string。这有可能吗?

修改

我从console.log(myString)中解除了问题,因为console.log的行为是我最初没有考虑到的,这使问题复杂化,这并不意味着{{1} }}

1 个答案:

答案 0 :(得分:8)

你的问题并不完全有意义,但听起来你想要实现.toString界面:

var MyClass = function(value) {
  this.value = value;
};

MyClass.prototype.toString = function() {
  return this.value;
};


var classObj = new MyClass("hey there");

snippet.log(classObj);
snippet.log(classObj + "!");
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

使用ES6类语法:

class MyClass {
    constructor(value) {
        this.value = value;
    }

    toString() {
        return this.value;
    }
}

var classObj = new MyClass("hey there");

console.log(classObj);
console.log(classObj + "!");