请教,这段JavaScript写法是是什么意思?

时间:2021-12-20 20:18:35
function extend(t,s){
each(s,function (k,v){ t[k] = v; });
return t;
}
extend(String.prototype, {
trim: function(r){
r = r || /(^\s+)|(\s+$)/g;
return this.replace(r, "");
},
empty: function(){
return this.trim() === '';
},
lenW: function(){
return this.replace(/[^\x00-\xff]/g, "**").length;
}
});

这里前面顶一个了extend(t,s)函数,后面又有一个extend(String.prototype,{})
我对后面这个extend()的理解是,它定义一些字符串的通用处理方法,貌似是扩展String类型的方法。但我想知道,这前后两个extend有什么关系吗?
还有,我对原型的概念还是不怎么理解,String.prototype,这个原型,是String类型的原型,还是具体某个string对象的原型呢?

7 个解决方案

#1


呵呵,前面就是定义一个extend的函数阿,后面就是调用这个函数给String加一些功能阿。

#2


是String类型的原型

#3


是的,就是在JS中进行类的继承

#4


1. 前者是定义extend函数,后者是“调用”extend函数
2. 是直接扩展了构造函数String的原型,这样做之后所有的string对象就具有了扩展的方法了

#5


引用 4 楼 objector 的回复:
1. 前者是定义extend函数,后者是“调用”extend函数
2. 是直接扩展了构造函数String的原型,这样做之后所有的string对象就具有了扩展的方法了

谢谢您的回答,还是想请教个问题,function extend(t,s){},这个extend函数应该是一个对象啊,对象有构造函数String吗?是不是应该说成“它的Constuctor构造器是String类型呢”?我对构造器不是很懂。谢谢。

#6


引用 5 楼 cy88310 的回复:
引用 4 楼 objector 的回复:
 1. 前者是定义extend函数,后者是“调用”extend函数
 2. 是直接扩展了构造函数String的原型,这样做之后所有的string对象就具有了扩展的方法了

 谢谢您的回答,还是想请教个问题,function extend(t,s){},这个extend函数应该是一个对象啊,对象有构造函数String吗?是不是应该说成“它的Constuctor构造器是String类型呢”?我对构造器不是很懂。谢谢。


1. 这个extend函数跟String在这里没什么关系的,只是因为你的代码里面碰巧需要用到extend函数来帮助String扩展原型上的功能而已。
2. extend是函数,函数是对象这没错,但是函数有它自己的构造函数:Function

你可以这样去理解,分解开来不就清楚了嘛:

function extend(t,s){
    each(s,function (k,v){    t[k] = v; });
    return t;
}

var t = String.prototype;
var s = {
    trim: function(r){
        r = r || /(^\s+)|(\s+$)/g;
        return this.replace(r, "");
    },
    empty: function(){
        return this.trim() === '';
    },
    lenW: function(){
        return this.replace(/[^\x00-\xff]/g, "**").length;
    }
};
// 调用extend函数
extend(t, s);

#7


I see!
谢谢Objector,very thanks!

#1


呵呵,前面就是定义一个extend的函数阿,后面就是调用这个函数给String加一些功能阿。

#2


是String类型的原型

#3


是的,就是在JS中进行类的继承

#4


1. 前者是定义extend函数,后者是“调用”extend函数
2. 是直接扩展了构造函数String的原型,这样做之后所有的string对象就具有了扩展的方法了

#5


引用 4 楼 objector 的回复:
1. 前者是定义extend函数,后者是“调用”extend函数
2. 是直接扩展了构造函数String的原型,这样做之后所有的string对象就具有了扩展的方法了

谢谢您的回答,还是想请教个问题,function extend(t,s){},这个extend函数应该是一个对象啊,对象有构造函数String吗?是不是应该说成“它的Constuctor构造器是String类型呢”?我对构造器不是很懂。谢谢。

#6


引用 5 楼 cy88310 的回复:
引用 4 楼 objector 的回复:
 1. 前者是定义extend函数,后者是“调用”extend函数
 2. 是直接扩展了构造函数String的原型,这样做之后所有的string对象就具有了扩展的方法了

 谢谢您的回答,还是想请教个问题,function extend(t,s){},这个extend函数应该是一个对象啊,对象有构造函数String吗?是不是应该说成“它的Constuctor构造器是String类型呢”?我对构造器不是很懂。谢谢。


1. 这个extend函数跟String在这里没什么关系的,只是因为你的代码里面碰巧需要用到extend函数来帮助String扩展原型上的功能而已。
2. extend是函数,函数是对象这没错,但是函数有它自己的构造函数:Function

你可以这样去理解,分解开来不就清楚了嘛:

function extend(t,s){
    each(s,function (k,v){    t[k] = v; });
    return t;
}

var t = String.prototype;
var s = {
    trim: function(r){
        r = r || /(^\s+)|(\s+$)/g;
        return this.replace(r, "");
    },
    empty: function(){
        return this.trim() === '';
    },
    lenW: function(){
        return this.replace(/[^\x00-\xff]/g, "**").length;
    }
};
// 调用extend函数
extend(t, s);

#7


I see!
谢谢Objector,very thanks!