1

对象

在javascript中经常听到一句话叫做一切事物皆对象。
其实得除null和undefined除外 数字也有点特殊看栗子

false.toString();//'false'
[1,2,3].toString();//'1,2,3'

//数字
(1).toString();//'1'
1 .toString();// '1'
1..toString();// '1'
1.toString();//Unexpected token ILLEGAL
//null undefined
null.toString();//Cannot call method 'toString' of null
undefined.toString();//Cannot call method 'toString' of undefined

数字应该是js引擎解析出错
这里特别注意的是对象也分为普通对象和函数对象,函数对象就是通过new Function创建的对象普通对象就是Object后面讲到原型时会用到。

属性

var text1={};
var text2={name:'xx',age:'3'}
//属性的访问
text2.name//xx
text2[name]//undefined
text2['name']//xx

对象属性的删除只有delete,去设置它的值为null、和undefined 只是制空 方便gc回收属性仍然存在。

var text={name:'xx',age:'3',say:'hello'}
text.name=null;
text.age=undefined;
delete text.say;
text;//{name:null,age:undefined}

原型

概念:每当定义个个对象的时候,对象中会包含一些预定义的属性。其中函数对象的一个属性就叫原型对象prototype。
普通对象是没有prototyoe的,但有__proto__属性。
作用:原型对象就是用来做继承用的。
栗子:

var person=function(name){
    this.name=name;
}
person.prototype.getName=function(){
    return this.name;
}
var xx=new person('我叫xx');
xx.getName();//通过原型的属性继承了getName方法

至于怎么实现的就得说到原型链了。

原型链

概念:JS在创建对象的时候不管是普通对象还是原型对象都有一个叫做__proto__的属性,他用于指向那个创建它的对象的原型prototype然而创建他的对象也有_proto_这个属性,同样又指向上一层,直到 __proto__这个属性为null为止,这样形成的一条链状就叫原型链 。

new

function person(){
}
var p=new person();
alert(p.__proto__===person.prototype);//true

new的作用:

  1. var p={};//声明个空对象

  2. p.__proto__=person.prototype;//把P__proto__的属性指向person的原型

  3. person.call(p);//把this的指针指向p

constructor

概念:constructor这个属性不会影响内部的任何属性。
只是JavaScript语言设计的历史遗留物。由于constructor属性是可以变更的,所以未必真的指向对象的构造函数,只是一个提示。不过,从编程习惯上,我们应该尽量让对象的constructor指向其构造函数,以维持这个惯例。
总结下:说白了一个并没什么太大用的东西!y很不靠谱!很费操作!
理由看栗子1:

//定义构造函数
function person(name){
    this.name=name;
}
//给他原型上添加个方法
person.prototype.say=function(){
    console.log(this.name);
}
//测试下
var p=new person("xx");
alert(p.constructor)

clipboard.png

这个栗子没毛病他指向了构造函数。
然后看栗子2:

//定义构造函数
function person(name){
    this.name=name;
}
//给他原型上添加个方法
person.prototype={
    say:function(){
    console.log(this.name)
    }

}
//测试下
var p=new person("xx");
alert(p.constructor)

clipboard.png
看吧很不靠谱除非你在去手动的改它的值

hasOwnProperty

来源:它就是通过原型链从Object.prototype那继承过来的。
作用:用来判断一个对象是否包含自定义属性而不是原型链上的属性
上栗子:

Object.prototype.one=1;//先定义一个原型属性one
var text={two:2,three:3};//那么所有的普通对象都继承one
console.log(text.one);//1
'one' in text;//true 他去找原型链上的属性去了
text.hasOwnProperty('one');//false
text.hasOwnProperty('two');//true
text.hasOwnProperty('three');//true

lx_blog
97 声望12 粉丝

geek