function MyObject(){ var name; var id; } function MyObject(name,id){ this.name=name; this.id=id; }明显不正确 var 在function构造执行的时候已经消亡了。 第二个函数还把第一个覆盖了。javascript没有函数重载 function MyObject(name,id){ this.name=name; this.id=id; } 你要定义类这样就行了 构造体这样写都是可以通过编译的 var obj = new MyObject("name", 1); var obj2 = new MyObject("name"); var obj3 = new MyObject(); 不过里面没有传的值就自动为undefined了
var name;
var id;
}
function MyObject(name,id){
this.name=name;
this.id=id;
}明显不正确
var 在function构造执行的时候已经消亡了。
第二个函数还把第一个覆盖了。javascript没有函数重载 function MyObject(name,id){
this.name=name;
this.id=id;
}
你要定义类这样就行了
构造体这样写都是可以通过编译的
var obj = new MyObject("name", 1);
var obj2 = new MyObject("name");
var obj3 = new MyObject();
不过里面没有传的值就自动为undefined了
多态???看我blog
http://rainsilence.javaeye.com/blog/604418其中var Animal = Rs.Class({
initialize: function(name){
this.name = name;
},
showName: function(){
alert(this.name);
}
});
var BlackCat = Rs.Class(Cat, {
initialize: function(name, type) {
// 调用父类构造函数
BlackCat.superclass.prototype.initialize.call(this, name);
this.type = type;
},
showType: function() {
alert(this.type);
},
showName: function() {
alert(this.name + ":" + this.type);
}
});
Animal中有showName,BlackCat中也有showName
BlackCat中的showName将Anmial中的重写了(Override/函数重写而不是函数重载)
那么var animal = new BlackCat();
animal.showName();调用的是BlackCat的showName。
alert(animal instanceof Animal);// true
这才是多态。多态的基础有两个,一个是继承,一个是函数重写。你这里只是单单的两个函数。其中第二个函数把第二个函数给覆盖了而已。你的代码相当于
MyObject = new Function(函数内容);
MyObject = new Function("a", "b", 函数内容);第二个函数指针将第一个覆盖。
只是对象的方法和属性有讲究,你的两种写法,name和id都是不是对象的属性,这么写:function MyObj(){};
Myobj.name=null;
Myobj.id=null;或者var MyObj={name:null,id:null};
function MyObject(name,id)
{
var name;
var id;
}function MyObject(name,id)
{
this.name=name;
this.id=id;
}
MyObject.prototype.show = function()
{
alert("this.name="+this.name +";this.id="+ this.id);
}var obj = new MyObject("csdn.net",1);
obj.show();
无话可说
// 这种写法等同于下面的写法,在结构上,可以看成是已从单例类中实例化的单例对象
var MyObj = {name:'test'};var MyObj = new Object();
MyObj.name = 'test';function MyObject() {};
MyObject.prototype.showName = function() {
alert(this.name);
};// 这种写法和上面的写法没有任何区别,因为MyObject是Function,Function也是Object。
MyObject.name = 'test';// 但是这里是null,你的写法跟属性完全没关系。勉强算得上是static。而且还是模拟的。
new MyObject().showName();
alert(MyObject.name);// 属性的正统写法
MyObject.prototype.name = 'test';
new MyObject().showName();
http://iamduyu.cn/?tag=javascript
function MyObj(){};
Myobj.name=null;
Myobj.id=null;
和
var MyObj={name:null,id:null};
一样吗?我上面已经解释的很清楚了// 这两种写法意义一样
function MyObj(){};
Myobj.name=null;
Myobj.id=null;MyObj = new Function();
MyObj.name = null;
MyObj.id = null;
// 这两种写法意义一样,({name:'test'}可以看成单例模式)
var MyObj = {name:'test'};var MyObj = new Object();
MyObj.name = 'test';引用你的话
【莫名其妙的是,null和属性有什么排斥关系吗?prototype下固然可以为产出对象声明属性,直接写的就不是属性?】null和属性并没有排斥关系,但是后面那句是万万不能苟同。建议你把我16楼的回复好好运行下,就知道其中的奥妙了。继续引用你的话
【更幽默的是js里连class都没有,哪里还有static的概念。】
16楼代码:
// 但是这里是null,你的写法跟属性完全没关系。勉强算得上是static。而且还是模拟的。
new MyObject().showName();
alert(MyObject.name);
这里我上面对name进行了赋值,但是这里却出现null,说明你的属性设置方法根本取不到。后面我还加了勉强一词。可懂?
你的教程我拜读过了js面向对象怎么不写原型链继承?既然js有继承为什么没有class,写的很突然,突然就jquery了。建议你平时修炼的时候jquery少用为妙。那玩意儿是强大,强大的让你没法成为高手。