我需要帮助来修复示例3中的代码。由于此引用,我无法对如何使原型工作进行排序。我知道这是对本地范围的引用,但即使创建一个var keep = this来传递它在原型中失败的引用:
//exemplo 1
var m1=function(){
this.a=null;
this.b=null;
if (typeof this.fr !== "function") {
m1.prototype.fr = function (obp) {
var propriedade;
for (propriedade in obp) {
if (obp.hasOwnProperty(propriedade)) {
this[propriedade]=obp[propriedade];
}
}
return this;
}
}
}
var t2=new m1().fr({"a":"eee"}); //works!
console.log(t2);
//exemplo 2
var m1=function(obp){
this.a=null;
this.b=null;
if (typeof this.fr !== "function") {
m1.prototype.fr = function () {
var propriedade;
for (propriedade in obp) {
if (obp.hasOwnProperty(propriedade)) {
this[propriedade]=obp[propriedade];
}
}
return this;
}
}
}
var t2=new m1({"a":"eee"}).fr(); //works!
console.log(t2);
//exemplo 3
var o1={
m1:function(){
var m1=this;
this.a=null;
this.b=null;
if (typeof this.fr !== "function") {
this.prototype.fr = function (obp) { //fails here
var propriedade;
for (propriedade in obp) {
if (obp.hasOwnProperty(propriedade)) {
thia[propriedade]=obp[propriedade];
}
}
return this;
}
}
}
}
var t2=new o1.m1().fr({"a":"eee"}); //fails!
console.log(t2);
根据Karim回答固定:
//exemplo 1
var m1=function(){
this.a=null;
this.b=null;
if (typeof this.fr !== "function") {
m1.prototype.fr = function (obp) {
var propriedade;
for (propriedade in obp) {
if (obp.hasOwnProperty(propriedade)) {
this[propriedade]=obp[propriedade];
}
}
return this;
}
}
}
var t1=new m1().fr({"a":"eee"});
console.log(t1);
//exemplo 2
var m2=function(obp){
this.a=null;
this.b=null;
if (typeof this.fr !== "function") {
m2.prototype.fr = function () {
var propriedade;
for (propriedade in obp) {
if (obp.hasOwnProperty(propriedade)) {
this[propriedade]=obp[propriedade];
}
}
return this;
}
}
}
var t2=new m2({"a":"eee"}).fr();
console.log(t2);
//exemplo 3
var o1={
m1:new m1()
}
var t3=o1.m1.fr({"a":"eee"});
console.log(t3);
答案 0 :(得分:2)
这是你的代码:
var o1={
m1:function(){
var m1=this;
this.a=null;
this.b=null;
if (typeof this.fr !== "function") {
this.prototype.fr = function (obp) { //fails here
var propriedade;
for (propriedade in obp) {
if (obp.hasOwnProperty(propriedade)) {
thia[propriedade]=obp[propriedade];
}
}
return this;
}
}
}
}
您尝试从当前prototype
访问this
,其中对象方法内部是当前实例。
但是当前实例是对象文字(o1
)而prototype
对象意味着要用于构造函数在这种情况下没有。
尝试为o1创建构造函数,然后在if语句中引用设置原型的函数