js 自定义对象 构造函数的问题
varp=function(options){varopt={};this.init(options);};p.prototype.init=function(optio...
var p = function(options){
var opt={};
this.init(options);
};
p.prototype.init=function(options){ };
这个代码有啥问题啊?为啥this.init(options)这句报错,说找不到对象啊?
我这种方法应该没有问题的吧?
主要是全部都写在构造函数里面很乱,所以我想私有方法和私有属性写在构造函数里面,然后其余的用原型定义的方式来给,但是像上面的代码却报错说没有init方法,求解
而且如果更改为:
var p = function(options){
var opt={};
this.init(options);
};
p.prototype={
init:function(options){
opt=$.extend({},options);
},
}
这样的情况,却又说opt没有定义……迷糊了……
求解答,之后再加分! 展开
var opt={};
this.init(options);
};
p.prototype.init=function(options){ };
这个代码有啥问题啊?为啥this.init(options)这句报错,说找不到对象啊?
我这种方法应该没有问题的吧?
主要是全部都写在构造函数里面很乱,所以我想私有方法和私有属性写在构造函数里面,然后其余的用原型定义的方式来给,但是像上面的代码却报错说没有init方法,求解
而且如果更改为:
var p = function(options){
var opt={};
this.init(options);
};
p.prototype={
init:function(options){
opt=$.extend({},options);
},
}
这样的情况,却又说opt没有定义……迷糊了……
求解答,之后再加分! 展开
推荐于2016-08-21
展开全部
var p = function(options){
this._opt = {};
//var opt={};
this.init(options);
};
p.prototype={
init:function(options){
this._opt=$.extend({},options);
//opt=$.extend({},options);
},
}
你漏了 this 关键字。没有 this,所有变量范围全是声明在函数内的。
追问
使用this后
如果var myp=new p();
那么myp中是可以看见_opt这个属性的,但是这个变量应该是需要保护起来的才对。
我知道问题肯定是在作用域范围引起的,但是昨天查了一天都没有找到解决办法(即无法按照p.prototype=...的方式来执行,而只是能按照全部定义在一起的方式来做)
追答
这里只能靠调用约定,所有人都遵循不直接引用对象里名称是下划线开头的属性/方法(所以我才把opt改为_opt,表明这是私有的)的约定(非要调用也没问题,但你不能保证其结果总是调用者预期的,因为这些是私有的,实现者大可以随意改动),你不能真的隐藏起来(其实通过闭包可以,但那不是基于prototype对象原型的):js没有这个可见性级别这个东西,它毕竟不是真的面向对象,只能模拟,隐藏起来意义不大。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询