Javascript 如何使原型在对象内的函数内工作?
我需要帮助来修复示例3中的代码。我无法排序如何使原型工作,因为这个参考。我知道this引用本地范围,但即使创建var keep=this来传递引用,它在原型中也会失败:Javascript 如何使原型在对象内的函数内工作?,javascript,function,object,prototype,Javascript,Function,Object,Prototype,我需要帮助来修复示例3中的代码。我无法排序如何使原型工作,因为这个参考。我知道this引用本地范围,但即使创建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 pr
//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);
根据卡里姆答案修正:
//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);
这是您的代码:
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;
}
}
}
}
您正试图从当前的this
中访问prototype
,该在对象方法中是当前实例
但是当前实例是一个对象文本(o1
),而prototype
对象用于本例中没有的构造函数
尝试为o1创建构造函数,然后在if语句中引用函数以设置原型这是您的代码:
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;
}
}
}
}
您正试图从当前的this
中访问prototype
,该在对象方法中是当前实例
但是当前实例是一个对象文本(o1
),而prototype
对象用于本例中没有的构造函数
尝试为o1创建一个构造函数,然后在if语句中引用该函数来设置原型