87,990
社区成员
发帖
与我相关
我的任务
分享
(function(){
function Person(firstName, lastName, age){
//私有变量:
var _firstName = firstName;
var _lastName = lastName;
//公共变量:
this.age = age;
//方法:
this.getName = function() {
return (firstName + " " + lastName);
};
Person.prototype.sayHello = function() {
return ("我是" + firstName + " " + lastName);
};
var f = function(){
return _firstName;
};
Person.prototype.get = function() {
return f;
};
};
var gs = new Person("Bill", "Gates", 53);
var jb = new Person("Steve", "Jobs", 53);
document.write("<br>getName:");
document.write(gs.getName() + "=" + jb.getName());//结果是正确的,方法分离,所以数据也分离
document.write("<br>sayHello:");
document.write(gs.sayHello() + "=" + jb.sayHello()); //结果有问题,都是“Steve Jobs”了,主要是方法共享引起,但数据只认最后一次,这是与getName()的方法区别
document.write("<br>方法:");
document.write(gs.getName == jb.getName); //这是false
document.write(",");
document.write(gs.sayHello == jb.sayHello); //这是true
})();
(function(){
function Person(firstName){
var _firstName = firstName; //私有变量:
this.constructor._private.set(this, {_firstName : firstName});
this.getName = function() {
return firstName;
};
};
Person._private = {
N:0, cache : {},
get : function (obj){
for(var id in this.cache){
if(obj==this.cache[id].ins){
return this.cache[id].data;
}
}
},
set : function (obj, data){
this.cache[this.N++] = { ins: obj, data: data };
}
};
Person.prototype.sayHello = function() {
var data = this.constructor._private.get(this);
return ("我是" + data._firstName);
};
var gs = new Person("Bill Gates");
var jb = new Person("Steve Jobs");
document.write("<br>getName : ");
document.write(gs.getName() + " / " + jb.getName());//结果是正确的,方法分离,所以数据也分离
document.write("<br>sayHello : ");
document.write(gs.sayHello() + " / " + jb.sayHello()); //结果有问题,都是“Steve Jobs”了,主要是方法共享引起,但数据只认最后一次,这是与getName()的方法区别
document.write("<br>gs.getName===jb.getName : ");
document.write(gs.getName === jb.getName); //这是false
document.write("<br>gs.sayHello===jb.sayHello : ");
document.write(gs.sayHello === jb.sayHello); //这是true
})();
Person.prototype.sayHello = function() {
return ("我是" + this.getName());
};
Person.prototype.sayHello = function() {
return ("我是" + this.getName())
};Person.prototype.sayHello = function() {
return function() {
return ("我是" + this.getName())
};
}();document.write(gs.sayHello == jb.sayHello);是false哦,我想要是true
//上面方法的代码可能变量用错了,可能有误导:
this.getName = function() {
return (_firstName + " " + _lastName + ":" + this.age);
};
Person.prototype.sayHello = function() {
return ("我是" + _firstName + " " + _lastName + ":" + this.age);
};
this.sayHello = function(a,b) {
return function() {
return ("我是" + a + " " + b)
};
}(firstName,lastName);