使用构造函数添加方法
Using constructor function to add methods
创建构造函数的经典方法如下:
var Obj = function(param){
this.param = param;
this.method = function(){ console.log(this.param); }
}
但是为什么我不能这样做呢?
Obj.anotherMethod = function(){ //some code }
(I know about Obj.prototype.anotherMethod
).
在实际使用中,我不能理解为什么用String.prototype.func
代替String.func
来定义新方法。是不是因为String
是构造函数,不能给它添加方法?
这是两码事。
如果你添加一个方法到Constructor.prototype
,它将在Constructor
的所有实例上可用。
您也可以为Constructor
本身添加方法。但是,实例不会继承它们。
charAt
方法是在String.prototype
上定义的,所以你可以同时使用"abc".charAt(1)
和String.prototype.charAt.call("abc", 1)
。但是
fromCharCode
是在String
上定义的,所以你可以使用String.fromCharCode(65)
,但是"abc".fromCharCode
是未定义的
您可以通过原型继承来做到这一点。您可以使用Object.create()
让对象从其他对象继承,而不是使用构造函数。你可以随时向父对象添加成员,并且这些成员对于以父对象为原型的对象是可用的。
var Base = {a: "a"};
Base.b = "b";
var sub = Object.create(Base); // creates a new object with Base as its prototype
Base.c = "c"; // sub.c will be available because Base is its prototype!
alert(sub.a + sub.b + sub.c); // "abc"
http://jsfiddle.net/kqtm4f8j/理解原型继承模式的好文章:
http://aaditmshah.github.io/why-prototypal-inheritance-matters/下面的一小段代码应该会有所帮助。从构造函数开始:
var Obj = function(param){
this.param = param;
this.method = function(){ console.log(this.param); }
}
现在创建一个实例:
var inst = new Obj("testParam")
//now use it
console.log(inst.param) // logs: "testparam
现在给Obj添加另一个参数:
Obj.anotherParam = "TestParam2"
console.log(Obj.anotherParam) // <-- Works
console.log(inst.anotherParam) // <-- but this is Undefined on the instance
但是如果你把它添加到原型中:
Obj.prototype.anotherParam = "TestParam2"
console.log(inst.anotherParam) // <-- this now works as expected
结论是,当你将它添加到原型中时,它对所有实例都可用。如果简单地将其添加到构造函数中,则只有构造函数函数具有该参数。在Javascript中有很多其他的方法可以做到这一点,但是理解原型对象是一个很好的开始。
- 如何在Angular单元测试中从另一个控制器的rootScope将方法添加到rootScope中
- 如何将onChange方法添加到ExtJS 4表单中的所有字段(textField)中
- 如何向.apply()方法添加回调
- 向 Firebase “push” 方法添加时间戳
- jQuery方法添加一个TextBox
- 如何将方法添加到Html5画布
- 什么'在javascript中将新方法添加到对象中的区别是什么
- 如何在角度控制器中为该方法添加验证
- 是否可以将方法添加到空值的原型中
- 如何使用 util 将方法添加到模块 express() 中
- 在 JavaScript 中隐式地将方法添加到构造函数的原型中
- 如何将另一个方法添加到Pinterest按钮的onlick事件中
- 将方法添加到数字引发异常
- 向方法添加方法
- 通过下拉列表框上的 appendChild 方法添加的项目不会显示在 IE8 下
- 如何将实例方法添加到帆中的所有模型.js
- 为什么我的javascript .push方法添加了太多对象
- 分机.js确认方法添加新行字符
- 使用原型将新方法添加到JScrollPane
- 我想克隆一个 javascript 类. 将方法添加到克隆的属性中,而不实际覆盖现有方法