object.key = fn() 与 object.prototype.key = fn() 之间的差异
difference between object.key = fn() Vs object.prototype.key = fn()?
选项 1:
NotificationsService.push = function (notifications) {}
选项 2:
NotificationsService.prototype.push = function (notifications){}
直接定义函数与在原型链上定义函数有什么区别?是遗产吗?
这里NotificationsService
是什么?
如果它是一个函数,那么区别在于,在第二种情况下,NotificationsService
的每个实例都将继承push
。
var instance = new NotificationsService();
instance.push(...);
在第一种情况下,您只需扩展NotificationsService
,它对它创建的实例没有任何影响:
var instance = new NotificationsService();
instance.push(...); // will throw an error
NotificationsService.push(); // will work
如果NotificationsService
是一个对象,并且我们假设NotificationsService.prototype
存在并且是一个对象,那么它与原型链没有任何关系,您只需在两个不同的位置定义函数即可。这是一个更简单的例子:
var foo = {};
var foo.prototype = {};
// defines a method on foo
foo.push = function() {...};
// defines a method on foo.prototype
foo.prototype.push = function() {...};
不过,这两个属性彼此没有任何关系。
总结:在这两种情况下,您都在不同的对象上定义方法,因此必须以不同的方式使用。具体操作取决于您的使用案例。
我能给你的最好的建议是阅读这个,它有我迄今为止见过的最好的原型解释之一,但只是为了提及,使用两者会给你相同的最终结果,但有不同的方法,我更喜欢使用第一个,除非你真的需要一个原型。
Protoype 是对象的相等延伸。
如果在 A 类中使用
var b = new A()
b.prototype.job = "Nothing"
var c = new B()
console.log(c.job); //Nothing
所有变量都有实例 A,A 的下一个实例将具有 prop 作业
但如果只是把
b.工作 = "什么都没有";
变量 C 没有道具"作业"
console.log(c.job); //undefined
第一种情况只会影响您声明的对象的当前实例
var NotificationsService=new WhateverService();
NotificationsService.push=function(notifications) {
console.log('Instance function',notifications)
};
NotificationsService.push('hello')
实例函数 你好
第二种情况应该应用于父"类"(altough js 没有类)在这种情况下 WhateverService
WhateverService.prototype.push=function(notifications) {
console.log('Prototype function',notifications);
}
var NotificationsService=new WhateverService();
NotificationsService.push('hello')
原型功能 你好
如果您声明 WhateverService 的第二个实例,它将继承绑定到父级原型的任何方法,并且没有直接附加到同级实例的方法。
- 函数未在Object.keys或Object.getOwnPropertyNames下列出,但可以调用
- delete在Object上效率低下,但在DOM Element's的数据属性,与null out相比
- 有没有一种方法可以列出Ember.Object的所有绑定
- 如何取消object.prototypes javascript的一个函数
- 为什么是文档.旧版应用程序中的DOM-object.properties为null
- angular.js:13424错误:[ng:areq]参数'fn'不是函数,getObject
- 将*.js文件的内容放入Object中
- Babel编译错误:找不到模块核心js/library/fn/get迭代器
- Object.prototype using 'this'
- 使用Object.create()的角度服务继承
- 如何使用object.assign()从其他对象引用基本对象属性
- 循环的数组推入在Object容器中具有不同的值
- reducers在redux中得到Function not Object,what'it’他错了
- JSON.stringify和Object.keys在同一个对象上产生不同的结果
- JS-fn()中返回后方括号的含义{return{}[]}
- 在使用object.create创建的对象中使用super
- object.key = fn() 与 object.prototype.key = fn() 之间的差异
- 模块.在nodejs中导出- fn vs object
- 参数& # 39;fn # 39;不是一个函数,得到Object angularjs [ng:areq]
- 未捕获的类型错误:属性'fn'对象[object DOMWindows]的不是函数