正如我们所知,通过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
答案 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));
答案 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