javascript – 在嵌套的Prototype子对象中使用’this’
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 在嵌套的Prototype子对象中使用’this’,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1876字,纯文字阅读大概需要3分钟。
内容图文
![javascript – 在嵌套的Prototype子对象中使用’this’](/upload/InfoBanner/zyjiaocheng/725/22aa86b4411c4ccc8111d503e7fe53bb.jpg)
我有一个类,并给它的原型几个子对象,以方便命名空间.这些子对象有方法.我无法弄清楚如何在这些方法中使用它来访问使用构造函数设置的属性.
我有一种感觉绑定,调用和应用都以某种方式涉及,但是我很难理解那些做什么,以及所有这些OOP-ness如何工作.有很多资源,但它们都是太低级别,或者高级别我不理解它们.谢谢!
function Object(
argument1,
argument2
){
this.property1 = argument1;
this.property2 = argument2;
}
Object.prototype = {
subObject1 : {
method1 : function(){
return this.property1;
}
},
subObject2 : {
method1 : function(){
return this.property2;
}
}
}
var foo = new Object(11, 22);
var bar = new Object(33, 44);
console.log(foo.subObject1.method1()); //I'd like this to return 11
console.log(foo.subObject2.method1()); //I'd like this to return 22
console.log(bar.subObject1.method1()); //I'd like this to return 33
console.log(bar.subObject2.method1()); //I'd like this to return 44
解决方法:
每当你调用foo.bar()形式时,这个内部栏都会引用foo.除非使用.bind将函数绑定到特定值,或者在ES6中使用新的“箭头”函数.
因此,一种解决方案可以是将方法绑定到特定实例.但是,在调用构造函数之前,实例不存在.这意味着你必须在构造函数中创建subObjectX:
function MyObject(argument1, argument2) {
this.property1 = argument1;
this.property2 = argument2;
this.subObject1 = {
method1: function(){
return this.property1;
}.bind(this)
};
this.subObject2 = {
method1: function(){
return this.property2;
}.bind(this)
};
}
或者使用新的ES6箭头功能;这些从它们创建的上下文中获取(与普通函数不同):
// ES6 only!
function MyObject(argument1, argument2) {
this.property1 = argument1;
this.property2 = argument2;
this.subObject1 = {
method1: () => {
return this.property1;
}
};
this.subObject2 = {
method1: () => {
return this.property2;
}
};
}
这意味着每个实例都有自己的子对象副本.
如果你想在原型上定义方法,你总是必须通过.call或.apply传递接收器:
foo.subObject1.method1.call(foo);
在这种情况下,根本没有将它分配给原型的好处,你可以只有一个接受对象的简单函数(method1(foo)).
内容总结
以上是互联网集市为您收集整理的javascript – 在嵌套的Prototype子对象中使用’this’全部内容,希望文章能够帮你解决javascript – 在嵌套的Prototype子对象中使用’this’所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。