CNode

麻烦帮忙看看这个函数,有个地方不明白,谢谢~

Lleolovenodejs发布于14 年前最后回复14 年前9 回复5668 浏览0 收藏
Function.prototype.method = function(name,func){
	this.prototype[name] = func;
	return this;
};

this.prototype[name]这句是啥意思?没弄明白。

查看回复

回复 (8)

O
olddog#1·14 年前

呵呵,这个举个小例子你就可以看出来了

var a = function() {
  console.log(1);
}

var b = function() {
  console.log(2);
}

a.method('b', b);

var c = new a();

c.b();
S
sumory#2·14 年前
Function.prototype.method = function(name,func){
    this.prototype[name] = func;
    return this;
};

function Fun(){
	
}

var Func = Fun.method('getValue',function(value){
	return 'this is value:'+value;
});

print(new Func().getValue(8));//this is value:8

解释一下:

  • Function.prototype.method 在 Function原型上定义了method方法,作用是在调用method方法的对象上添加了‘name'属性
  • 然后我们定义Fun构造函数,Fun.__proto__即 Function.prototype,所以Fun拥有method方法,我们来调用它,得到Func,Func即是拥有name(也就是getValue)方法的构造函数。
  • 然后new一个Func对象出来,调用getValue方法
L
leolovenodejs#3·14 年前
引用 sumoryFunction.prototype.method = function(name,func){ this.prototype[name] = func; return this; }; fu...

明白了,this.prototype[name]应该这么看:1、this.prototype;2、[name] 谢谢你~

L
leolovenodejs#4·14 年前
引用 sumoryFunction.prototype.method = function(name,func){ this.prototype[name] = func; return this; }; fu...

“作用是在调用method方法的对象上添加了‘name'属性”这句很受启发。

L
leolovenodejs#6·14 年前

谢谢你~

S
sumory#7·14 年前
引用 sumoryFunction.prototype.method = function(name,func){ this.prototype[name] = func; return this; }; fu...

@leolovenodejs 稍微有点不准确,其实是:在构造函数对象原型(prototype)上添加了’name'属性,这个属性被这个构造函数的所有实例共享(能通过链查找到).

参与回复
登录后即可参与回复。登录