javascript小记
来源:互联网 发布:java 可变数组 编辑:程序博客网 时间:2024/06/07 12:34
本人原本的写Java的,这篇文章就用Java的“话”来记录下我javascript的学习笔记吧。
如果想看原汁原味的javascript,什么字面量呀,闭包呀,请忽略本文。
代码1
var o={ name:'我是实例', fn:function(){ console.log('i am function in o'); }};o.show=function(){//实例对象的方法、字段可以动态增加 console.log('i create by :%s',this.constructor);// show constructor};
上面的代码中,o是一个对象实例,它的原型是Object。从Java的角度理解,o可以看做类Object的实例。
代码2
function MyObject(){ this.name ='myObject'; this.fn=function(){ console.log('i am just a fn in funcion MyObject'); }}var myObject =new MyObject();myObject.fn();//MyObject.fn();//实例方法需要实例化后才能调用,直接调用会报错。通过 函数来创建对象 ,创建的方法都是实例方法,不是静态方法。如果想给对象添加静态方法,可以这样:
MyObject.staticFn=function(){ console.log('i am static function in Myobject!');}MyObject.staticFn();
‘静态方法’只能通过‘类’名来调用,而不能通过实例对象来调用,否则报错。打印下就会知道了:
console.dir(MyObject);//{ [Function: MyObject] staticFn: [Function] } ‘静态方法’只在‘类’里。console.dir(myObject);//{ name: 'myObject', fn: [Function] }
代码3
var f1 = {echo: function() { console.log(("sound")); } };function Foo() {};var foo = new Foo(); // foo的基引用指向Object实例Foo.prototype = f1;/* 未定义 */console.log((foo.echo))//foo.echoe 首先查找自己,方向没有echo,于是向它的基引用查询,用构造函数//Foo()构造foo的时候,为foo创建的基引用是Object实例。所以这里显示undefinedvar foo2 = new Foo(); // foo2的基引用指f1对象foo2.echo(); // output: sound
理解基引用
JavaScript的对象是由构造函数创建的, 每个对象都有constructor属性表示创建该对象的构造函数:
function Test() { this.a = "hello"; }
var test = new Test(); // 由Test构造函数创建
alert(test.constructor);
var o = { a: "hello" };
//实际相当于
var o_ = new Object();
o_.a = "hello"; // 由Object构造函数创建
alert(o.constructor);
var test = new Test(); // 由Test构造函数创建
alert(test.constructor);
var o = { a: "hello" };
//实际相当于
var o_ = new Object();
o_.a = "hello"; // 由Object构造函数创建
alert(o.constructor);
构造函数也是对象, 那构造函数是由什么创建? 内建的Function函数:
function Test(a, b)
{
alert(a+b);
}
// 相当于:
Test = new Function(["a", "b"], "alert(a+b);");
{
alert(a+b);
}
// 相当于:
Test = new Function(["a", "b"], "alert(a+b);");
Function函数又是由什么创建? 实际上Function是本机代码实现的固有对象. 不过为了一致性, Function也有constructor属性, 该属性指向它自己. 接上面的代码:
/* 输出 function Function(){
[native code]
}
*/
alert(Test.constructor);
alert(Test.constructor.constructor === Test.constructor); // true
alert(Test.constructor === Object.constructor); // true
[native code]
}
*/
alert(Test.constructor);
alert(Test.constructor.constructor === Test.constructor); // true
alert(Test.constructor === Object.constructor); // true
0 0
- javascript小记
- javascript小记
- JavaScript小记
- javascript操作iframe小记
- JavaScript原型继承小记
- JavaScript过程小记
- javascript操作小记
- JavaScript知识点小记
- 读书小记《headfirst javascript》
- html、javascript 学习小记
- JavaScript优化小记
- JavaScript函数小记
- 悟透javascript 读后小记...
- JavaScript原型(prototype)小记
- Javascript学习小记(一)
- <javascript>Number.prototype.toFixed小记
- JavaScript中字符串转Json方法小记
- 小记Javascript的闭包中递归调用
- poj 1321(棋盘问题)
- GCC installation on Android
- LeetCode之旅(31)
- 【51tesing】测试者的价值
- 关于指针的常见疑惑
- javascript小记
- php-session-1218
- [leetcode] Container With Most Water
- 【度学堂】软件测试之bug分析定位技巧
- Linux的基本命令
- Service
- blackhat 2013 usa all 93 video
- Django Models的数据类型 汇总
- 基于html5 canvas的进度显示图表