直接访问String方法

时间:2015-01-08 15:24:08

标签: javascript

正如我们所知,通过String.prototype提供了诸如 concat(),indexof()之类的字符串方法。因此,每当创建新的字符串对象时,它都可以使用这些方法。但这里是我发现是 String javascript对象本身可以访问这些方法,即不一定需要新的字符串对象。 String 构造函数如何访问 String.prototype中的方法

工作代码:

<script type="text/javascript">

         var str3 = String.concat( "hlw","Stackover" );

         document.write("Concatenated String :" + str3); //outputs:hlwstackoverflow
</script>

这里的链接显示abv方法有效:记得用abv代替代码 http://www.tutorialspoint.com/cgi-bin/practice.cgi?file=javascript_76

最后,我使用的浏览器是firefox

3 个答案:

答案 0 :(得分:1)

Javascript中的所有内容(或几乎所有内容)都被视为对象。

假设我们正在创建String对象

// First I will define a constructor
function String(text) {
   this.text = text;
   this.indexOf = function() { ... };
}

在Javascript中,构造函数也是一个对象实例。当我在构造函数中使用“this”关键字时,我告诉我要在所有名为 prototype 的javascript对象中的特殊对象中创建一个新属性。

// Then I add a new property without using prototype obj
String.concat = function(txt1,txt2) { ... };

alert(String.prototype.indexOf); // it works
alert(String.concat);          // it works
                                // It will work because I'm using the String main Object

从Myclass Obj创建新实例时。新创建的对象将从父级继承原型对象,但不会直接添加到MyClass obj中的属性:

var instance = new String("any text");
alert(instance.concat); // undefined because the new instance will
                     // inherit only what is inside prototype obj

我必须将它添加到原型对象中,以便新实例继承该属性;

String.prototype.concat = function(txt1,txt2) { ... };
var instance = new String("any text");
alert(instance.concat) // it works

我猜有些库在你调用它之前直接在你的String对象中添加了一个concat函数。

修改

在Firefox,Chrome,Internet Explorer和Safari上测试过。您的代码适用于Firefox。所以,我想在你调用之前的某个地方,FIREFOX会直接向String Obj添加一个concat(txt1,txt2,...)。但它根本不是默认行为。

答案 1 :(得分:0)

首先启动一个字符串对象,然后像这样连接:

var str = "string1"
var constr = str.concat("string2");

在你的情况下:

var str1 = "hlw";
var str2 = "Stackover";
document.write("Concatenated String :" + str1.concat(str2));

Here is a fiddle

答案 2 :(得分:0)

您可以直接从原型中调用此方法,如:

String.prototype.concat("hlw","Stackover");

没有方法String.concat,但如果定义了'String'变量

,就会发生这种情况
var String = "";
String.concat("hlw","Stackover")

<强>但是

这似乎适用于Firefox中的所有标准内置对象,例如Array.indexOf

(当我们知道您假设的当前环境时,更容易知道会发生什么)

BTW这些方法似乎不一样:

String.concat.length // 2
String.prototype.concat.length // 1

String.concat方法不依赖于String.prototype.concat

String.prototype.concat = null;
String.concat("foo","bar") // foobar