何时使用Object.prototype / JavaScript实例方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了何时使用Object.prototype / JavaScript实例方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2567字,纯文字阅读大概需要4分钟。
内容图文
![何时使用Object.prototype / JavaScript实例方法](/upload/InfoBanner/zyjiaocheng/684/7006ee63a7754a2799d3b6240931a546.jpg)
JavaScript将Object.prototype定义为一种为类类对象定义方法或属性的方法.
使用Object.prototype时存在的一个大问题是通过回调调用方法时的不正确行为,因为这将具有调用上下文.
function Foo() {}
Foo.prototype.resize() {
console.log(this);
}
var foo = new Foo();
window.on('resize', foo.resize);
因此,要解决此限制,我们可以执行以下操作.
function Foo2() {
function resize() {
console.log(self);
}
var self = this;
this.resize = resize;
}
var foo2 = new Foo2();
window.on('resize', foo2.resize);
在上述情况下,似乎最好在示例2中始终定义类对象.
因此,什么时候应该使用Object.prototype工具?我的意思是,您无法先验地知道如何调用您的方法,并且最肯定的是,调用它们时,您需要正确的此上下文引用.
支持上下文:我想到了这个问题,因为您似乎正在使用Object.prototype创建实例方法.但是,如图所示,事实并非如此.您只是在创建与其实例没有“真实”连接的方法.因此,需要使用闭包来创建实例绑定方法.此外,阅读this excellent explanation of this后就想到了这个问题.
解决方法:
您之所以感到困惑,是因为您将JavaScript对象视为具有OOP语言之类的方法.因此,您认为它们应该具有固定的上下文,因为OOP语言中的方法通常使用“早期绑定”,因此它们被绑定到正确的上下文. JavaScript有所不同.当函数的上下文(这是在执行函数时确定的)时,它就是一种“后期绑定”.对我来说,将方法视为指向函数的简单对象属性是有益的,实际上可以在不同的上下文中执行.例如,我们可能会有这样的事情:
function resize() {
console.log(this);
}
resize.call(window);
resize.call(custom);
如果需要,当然可以使用bind实现“早期绑定”:
function O() {
this.resize = function() {}.bind(this);
}
var o = new O();
但这限制了对象方法的可重用性.例如,这是不可能的:
Array.prototype.slice.call(arguments)
您可以阅读here,以获取有关即使在ES6中也未绑定方法的一些建议.
原型不是静态方法,创建它们是为了使内存高效地代码重用.正如JLRishe指出的那样,原型的最大优点是减少了内存使用,因为您可以在原型上定义一个函数的实例,并可以方便地将其作为对象属性(在原型链中包含该原型)进行访问.但是原型只是为了方便.这是没有原型的调整大小的示例:
// here only one instance of `resize` function is created
function resize() {
console.log(this);
}
var o1 = {
resize: resize
}
var o2 = {
resize: resize
}
You are simply creating methods that have no “real” connection to
their instance.
正确,这是带有“方法”的原型的示例,稍后将在不同的上下文中使用“方法”:
var prototype = {
resize: function() {
console.log(this);
}
}
var o1 = {
resize: resize
}
Object.setPrototypeOf(o1, prototype);
var o2 = {
resize: resize
}
Object.setPrototypeOf(o2, prototype);
我认为构建JavaScript时应牢记函数是一类对象,而不是对象应具有上下文正确绑定的方法.
静态方法通常作为函数构造函数的属性实现,如下所示:
function SomeObjectConstructor() {}
SomeObjectConstructor.someStaticMethod = function() {}
内容总结
以上是互联网集市为您收集整理的何时使用Object.prototype / JavaScript实例方法全部内容,希望文章能够帮你解决何时使用Object.prototype / JavaScript实例方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。