标签:javascript javascript启示录 js对象 javascript原型 head对象
最近阅读了《JavaScript启示录》,一本很薄但是内容却很充实的书籍。展现了准确的JavaScript世界观,涉及对象、属性、复杂值、原始值、作用域、继承、this关键字、head对象等重要概念。注意:Math是一个静态对象,它不是使用new运算符的构造函数。
字符串、数字和布尔值使用字面量值时,只有在该值被视为对象的情况下才会创建实际的复杂对象。换句话说,在使用与构造函数有关的方法或者属性之前,一直使用原始数据类型。在这种情况下,JavaScript会在为字面量创建一个包装器对象,一边将该值视为一个对象。调用方法结束后,JavaScript即抛弃包装器对象,该值返回字面量类型。
var myStr1 = "foo"; var myStr2 = myStr1; var myStr3 = "foo"; console.log(myStr2 === myStr3); //结果:true myStr1 = "test"; console.log(myStr1,myStr2); //结果:test foo
复杂值的复制操作是引用的复制,而不是实际值;比较操作采用引用比较。
示例1:var obj1 = {name : "ligang"}; var obj2 = obj1; var obj3 = {name : "ligang"}; console.log(obj1 === obj3); //false obj1.age = 25; console.log(obj1 === obj2); //true console.log(obj1,obj2); //Object {name: "ligang", age: 25} Object {name: "ligang", age: 25} obj1 = {name : "lg"}; //obj1指向新对象,和obj2不再指向同一个对象 console.log(obj1,obj2); //Object {name: "lg"} Object {name: "ligang", age: 25}
var obj1 = new Object('foo'); var obj2 = new Object(function(){});(2)
var add = new Function('param1', 'param2', 'return param1 + param2'); var sub = new Function('param1, param2', 'return param1 - param2');
var addConstructor = new Function('x' ,'y' ,'return x + y'); function addStatement(x, y){ return x + y; } var addExpression = function(x, y){ return x + y; };
var myFun = function(x, y, z){ console.log(myFun.length); //形参个数:3 console.log(arguments.callee.length); //形参个数:3 console.log(arguments.length); //实参个数:2 } myFun(1,2);
var ary = ['foo','bar']; ary.join(); //原型链:Array.prototype ary.toLocalString(); //原型链:Object.prototype
var myFun = function(){} console.log(myFun.prototype); //firefox:Object {} chrome:myFun {} console.log(typeof myFun.prototype); //Object
Array.prototype.foo = 'foo'; var ary = []; ary.__proto__.foo; //结果:"foo"注意:__proto__不是官方ECMA标准的一部分;构造函数属性可用于跟踪从对象到它继承的原型对象的链接!
Array.prototype.bar = 'bar'; var arr = new Array(); console.log(arr.constructor.prototype.bar); //结果:"bar" console.log(arr.bar); //结果:"bar" bar对象上没有,从继承的原型上获取
var Foo = function Foo(){}; var FooInstance1 = new Foo(); console.log(FooInstance1.constructor); //结果:Foo() Foo.prototype = {}; var FooInstance2 = new Foo(); console.log(FooInstance2.constructor); //结果:Object()
如果想要替换JavaScript设置的默认prototype属性,应重新连接引用该构造函数的构造函数属性。
示例:var Bar = function Bar(){}; Bar.prototype = {constructor : Bar }; var BarInstance = new Bar(); console.log(BarInstance.constructor); //结果:Bar()
var MyFun = function myFun(){}; MyFun.prototype.x = 1; var o1 = new MyFun(); MyFun.prototype = { x : 2} var o2 = new MyFun(); console.log(o1.x); //结果:1 console.log(o2.x); //结果:2
版权声明:本文为博主原创文章,未经博主允许不得转载。转载请标明出处:http://blog.csdn.net/ligang2585116!
标签:javascript javascript启示录 js对象 javascript原型 head对象
原文地址:http://blog.csdn.net/ligang2585116/article/details/47039239