ホームページ >ウェブフロントエンド >jsチュートリアル >プロトタイプのソースコードの簡単な分析 文字列部分の補足 (4)_prototype

プロトタイプのソースコードの簡単な分析 文字列部分の補足 (4)_prototype

WBOY
WBOYオリジナル
2016-05-16 17:57:09937ブラウズ
替换 interpolate  | sub |  scan |  truncate | gsub
interpolate: 文字列をテンプレートとして扱い、オブジェクトのプロパティを入力します。
sub: pattern で指定されたパターンに一致する文字列内の最初に指定された部分文字列を置換します。
scan: パラメーター pattern で指定されたパターンに一致する文字列内のすべての部分文字列をスキャンします。元の文字列そのものを返します。
truncate: 文字列を指定された長さ (サフィックス部分を含む) で切り詰め、サフィックスを追加します。
gsub: pattern で指定されたパターンに一致する文字列内のすべての値を置換

に置き換えます。 上記のメソッドのうち、最も重要なものは gsub です。詳細な手順については、「gsub の簡単な分析」を参照してください。 Prototype」テンプレートクラス--Template》
sub は、回数を制限できる点を除けば gsub と全く同じです。
コードをコピー コードは次のとおりです:

関数 sub(パターン、置換、カウント) {
replacement = prepareReplacement(replacement);
count = Object.isUnknown(count) ? 1 : count;
return this.gsub(pattern, function(match) {
if (--count)


scan は同じですが、最後に返されるのは文字列自体。
interpolate は文字列をテンプレートとして使用します。コアは依然として gsub です。唯一の違いは
truncate です (今では、間違ったカテゴリに分類したと漠然と感じています)。
文字列 'fuck the gfw' を例にとると、truncate で 'fuck the gfw'.truncate(10,'****') を実行する手順は次のとおりです:
1. 最初の 10 を取得します。 '** **'.length 文字 'fuck t'
2. サフィックス '****' を追加して 'fuck t****' を取得します。長さは 10 です。
この処理は非常に複雑です。シンプルで、ソースコードもシンプルです:



コードをコピー コードは次のとおりです: function truncate(length, truncation) {
length = length || デフォルトの長さ 30
truncate = Object.isUnknown(truncation) : truncation;// デフォルトのサフィックス.
return this.length > length ?
this.slice(0, length - truncation.length) truncation :



もう 1 つ: プロトタイプの便利さの 1 つは、いつでも有用なコードを別のセクションとして抽出したり、自分用に収集したりできることです。以下に別途提案されているテンプレートメソッドを示します。



コードをコピー
コードは次のとおりです。 function Template(template, pattern){ this .template = テンプレート;
this.pattern = パターン || /(^|.|r|n)(#{(.*?)})/;
}
Template.prototype = (function (){
function Evaluate(obj){
return gsub.call(this,function(match){
if(obj == null){
return match[0] ' ';
}
var before = match[1] ||
if(before == '\'){
return match[2]; var ctx = obj;
var expr = match[3];
var pattern = /^([^.[] |[((?:.*?[^\])?)](. |[| $)/;
match = pattern.exec(expr);
if (match == null){
while (match != null) {
var comp = match[1].search(/^[/) != -1 ? match[2].replace(/\\]/g, ']') : match[1]; >ctx = ctx[comp];
if (null == ctx || '' == match[3]) Break;
expr = expr.substring('[' == match[3] ? match [1] .length : match[0].length);
match = pattern.exec(expr);
}
return before (ctx === null ? '' : String(ctx)) ;
});
関数 gsub(replacement){
var 結果 = ''; var source = this.template;
if (!(pattern.length || pattern.source)) {
replacement = replace('');
return replacesource.split('').join (置換) 置換;
}
while (source.length > 0) {
if (match = source.match(pattern)) {
result = source.slice(0, match.インデックス);
結果 = replace(match) === null ? '' : String(replacement(match));
source = source.slice(match.index match[0].length); >}else {
result = ソース;
source = '';
}
return {
コンストラクター、
評価 :
}
})();






コードをコピー


コードは次のとおりです:


var template = new Template('my age is : #{name.age}');
console.log(template.evaluate({name : {age}) : 24}})) ;//私の年齢は : 24


文字列部分 (終わり)
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。