樓主問的這些問題非常好!針對JavaScript來講,上述這些問題弄清楚了,就會感覺到豁然開朗!推薦樓主看【JavaScript: The Definitive Guide, 4th Edition】上述這些問題都有詳細的描述!
解决方案 »
- 一个js在iframe内就不是特别好使
- 急急~~~~~js或者Jquery读取txt文件,(支持IE和火狐多种浏览器)!!!鸡鸡
- js 怎么传值??
- 又是ie行firfox不行的问题,求助!!!!
- prototype.js 冲突? 如果去掉prototype.js 这个叶面运行正常 麻烦熟悉prototype.js 的指导一下
- 300分,怎样用JS为history.go(-1); 添加自己的方法?
- document.designMode问题!
- Echarts使用地图报表时,实现不了动画效果
- easyUI datagrid 合计行扩展的问题
- js可以获取路由器MAC地址吗?如何获取?
- 单选按钮控制div的显示和隐藏的问题,解决不了啊,高手给看看啊!
- javascript中的单引号与双引号有什么区别?
等高手说吧挑个最简单的问题说
var a = 3; 没有length属性, var a = "dsfdsf" 竟然有了length属性?。 JS的变量类型是不固定的,会自动根据赋于它的值的类型而改变
a=3的时候,a是Number型,也就是数字,数字是没长度的
a="asdf"的时候,a就是String了,字符串是有长度了
JS是有基本类型的,明白了这些基本类型的用法就明白了
而动态语言之所以叫做动态语言并不仅仅是因为它需要被解释机解释执行,还因为他的对象
类型和结构是可以在运行过程中改变的,这一点在C Java等编译语言中是不允许的。我比较
喜欢用用少林和武当来比喻编译语言和动态语言之间的区别。在c 、 Java的世界里一切都是
都是刚性的从创建的那一刻起就已经定性了男人就是男人女人就是女人,而在js的世界里一切
是都是可以变化的,创建时是一个男人,并不能保证最后还是一个男人。<script type="text/javascript">
function Human(name,age,sex){
this.name=name;
this.age=age;
this.sex=sex;
}
Human.prototype.say=function(){
alert("hello !\n"
+"my name is:"+this.name+"\n"
+"my age is:"+this.age+"\n"
+"my sex is:"+this.sex);
}function Man(name,age){
Human.call(this,name,age,"male");
}
Man.prototype=new Human();
Man.prototype.shave=function(){
alert("我是"+this.name+"正在刮胡子!");
}function Woman(name,age){
Human.call(this,name,age,"female");
}
Woman.prototype=new Human();
Woman.prototype.birth=function(){
alert("我是"+this.name+"能生一个孩子");
}var boy=new Man("张三",22);
var girl=new Woman("莉莉",22);boy.say();
girl.say();boy.shave();
girl.birth();Woman.prototype.shave=function(){
alert("只要需要女孩也可以刮胡子!");
}
Man.prototype.birth=function(){
alert("只要需要男孩也可以生孩子!");
}
Human.prototype.say=function(){
alert("我是"+this.name+"因为系统需要我现在成了人妖!");
}boy.birth();
girl.shave();boy.say();
girl.say();
</script>
JAVASCRIPT会自己判定是否为什么类型
1不同于C、JAVA等语言,JS属于弱语言,语法核心是ECMAScript,里面的变量声明比较随意,在使用变量时甚至可以不加
声明直接使用,不过规范写法还是用VAR 声明下,楼主那种有无length的情况完全是视你的变量是数值还是字符串。
2JS是基于对象的语言,他不是完全面向对象的,所以并不具备面向对象的全部特征,js给我感觉是没什么封装性可言的
对象里的属性和方法都是人为整合到一起的,本身在对象内外都有方法表示。
楼主看了一天思考就这么深入,佩服,本来以为自己会了,发现楼主问题没几个答的上来,很多概念还很模糊
还要继续学习啊
<head>
<meta content="text/html" charset="gb2312">
<script type="text/javascript">
function SuperClass(sname){
this.name=sname;
this.getClassName=function(){
alert("SuperClass");
}
this.sayHello=function(){
alert(this.name+" SuperClass--sayHello");
}
}
function ChildClass(sname){
this.Super=SuperClass; //继承父类SuperClass JS类 继承第一种方式
this.Super();
//SuperClass.call(this); //继承父类SuperClass J2类 继承第二种方式
this.name=sname;
this.sayHello=function(){ //重写父类的sayHello()方法
alert(this.name+" ChildClass--sayHello");
}
}
function temp(){
var child=new ChildClass("一万哥");
child.sayHello(); //子类重写了父类的方法。
child.getClassName(); //子类继承父类的方法
}
window.attachEvent("onload",temp);
</script>
</head>
<body>
<div id="maindiv">
JavaScript高级程序设计!!! JavaScript是一门强大的基于对象的脚本语言....
</div>
</body>
</html>
还有一个补充问题就是: var a = new Peson(); alert(a); 为一个object;var a = new Function(); alert(a); 竟然不是一个object;这两个定义是不同的,一个是定义的类,一个是定义的函数.5. 我发现javascript根本就没有创造出什么数组来,里面竟然有undefined,这根本就不合逻辑啊,undefined没有分配内存区域,不是断开的吗?无法理解!这个undefined不表示没有分配内存区域,而只是没有明确定义的值,就像C中只定义了指针,但未赋值时,这个指针的状态也是未定义的.
楼主应当也是在看张孝祥的javascript网页开发吧?
这种若类型给写javascript带来了极大的灵活性。在javascript世界里,你可以将任何类型给一个变量,如:
var a;
a = 1;
a="hello world";
a=function(){};
a = []; //数组
a = {}; //对象javascript的类型,Number,Array,Function,Object,null,undefined等对于类型的判断,你可以
//javascript对象类型检测
var variablechecker = {
isElement: function(object) {
return object && object.nodeType == 1;
}, isArray: function(object) {
return object && object.constructor === Array;
}, isFunction: function(object) {
return typeof object == "function";
}, isString: function(object) {
return typeof object == "string";
}, isNumber: function(object) {
return typeof object == "number";
}, isUndefined: function(object) {
return typeof object == "undefined";
}
}2:关于方法重载:
javascript里n多东西能够从数组中获得,比如你给方法传递参数,但是在声明方法时,确不指定“形参”,那么参数怎么获取呢?当然是通过参数数组"arguments"了,既然是数组就能够按数组的方法来取得里面的参数值。
function fn()
{
if(arguments.length == 2)
{
....
}if(arguments.length == 1)
{
....
}
}fn(1,2);fn("hello");关于return的是什么类型的值,要看return var;这个var的类型了.3:关于javascript面向对象实现,可以参考msdn上的一篇文章,我今年就靠它混的...
http://msdn.microsoft.com/zh-cn/magazine/cc163419.aspx4:关于javascrit的数组,
在js里undefined也是一种值类型,它会占用内存空间的吧?(不太清楚).
你可以在数组里放任何东西,把数组的每个元素看成是一个普通变量就好了。
var array = [1,"1",null,undefined,{},[],function(){}];另外介绍一个小技巧,数组可以实现队列和栈数据结构:
//队列
var queue = [];
//入队
queue.push(1);
queue.push(2);
queue.push(3);
queue.push(4);
queue.push(5);//出队
queue.shift();//queue => 2,3,4,5
//栈
var stack = [];
//入栈
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);//出栈
stack.pop();
//stack => 1,2,3,4可能有不对的地方,欢迎大家指正!
然后再回来看这些问题网上也有一些关于js的面向对象编程的资料.
alert(boy instanceof Man)//true
alert(boy.instructor==Man)//false
boy在改变原型之前建立,也 继承新原型的属性?看来,是的