Javascript基础(1)

变量声明

var声明变量会在最先声明,但不会赋值,返回值为undefind
function声明函数也会在最先声明,但会直接进行定义,可以直接调用
函数有形参相当于提前声明变量

var a=123;
function fun(){
        alert(a);
        var a=456;
}
fun();
alert(a);    //undefind
var a=123;
function fun(){
        alert(a);
        a=456;
}
fun();
alert(a);    //456
var a=123;
function fun(a){
        alert(a);
        a=456;
}
fun();
alert(a);    //undefind 456

构造函数的执行流程

1.立刻创建一个新的对象
2.将创建的对象设置为函数中的this,在构造函数中可以使用this来引用新建的对象
3.逐行执行函数中的代码
4.将新建的对象作为返回值返回

function Person(name,age,gender){
      this.name=name;
      this.age=age;
      this.gender=gender;
      this.sayName=function(){
          alert(this.name);
      };
}
var per= new Person("孙悟空",18,"男");
console.log(per);                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      

使用同一个构造函数创建的对象,我们成为一类对象,也将一个构造函数称为一个类。
我们将通过一个构造函数创建的对象称为该类的一个实例。

console.log(per instanceof Person);

使用instanceof可以检查一个对象是否是一个类的实例。
所有对象都是object后代,任何对象和object做instanceof都得到true。

call()和apply()

这两个方法都是函数对象的方法,需要通过函数对象来调用
当对函数调用call()和apply()都会调用函数执行
在调用call()和apply()可以将一个对象指定为第一个参数,此时这个对象将会成为函数执行的this
call()方法可以将实参在对象之后一次传递
apply()方法需要将实参封装到一个数组中统一传递

this的情况

  • 当以函数形式调用时,this是window
  • 当以方法的形式调用时,谁调用方法this就是谁
  • 当以构造函数的形式调用时,this就是新创建的对象
  • 使用call和apply调用时,this是指定的那个对象

原型prototype

我们所创建的每一个函数,解析器都会向函数中添加一个属性prototype,这个属性对应着一个对象,这个对象就是原型对象。
如果函数作为普通函数调用prototype没有任何作用,当函数以构造函数的形式调用时,他所创建的对象中都会有一个隐含的属性,指向该构造函数的原型对象,我们可以通过_prototype_来访问该属性。
原型对象相当于一个公共区域,所有同一个类的实例都可以访问到这个原型对象,我们可以将对象中共有的内容,统一设置到原型对象中。
当我们访问对象的属性或方法时,它会现在对象自身中寻找,如果有则直接使用,如果没有则会去原型对象中寻找,找到则直接使用

function Myclass(){
  }
Myclass.prototype.a=123;
var mc= new Myclass();
var mc2= new Myclass();
mc.a=234
console.log(mc.a); //234
console.log(mc2.a); //123

使用in检查对象中是否含有某个属性时,如果对象中没有但原型中有,也会返回true

console.log("name" in mc);

可以使用对象的hasOwnProperty()来检查对象自身是否含有该属性。

console.log(mc.hasOwnProperty("name"));

原型对象也是对象,它也有原型,当我们使用一个对象的属性和方法时,会在自身中寻找,有则直接使用,没有则去原型对象中寻找,有则直接使用,没有则去原型的原型中寻找,知道找到Object对象的原型,Object对象的原型没有原型。

console.log(mc.__proto__.__proto__.__proto__);//null

tostring()方法

当我们直接在页面中打印一个对象时,实际上输出的是对象的tostring()方法的返回值。
如果我们希望在输出对象时不输出[object object],可以为对象添加一个tostring()方法

per.tostring=function(){
 return "Person[name="+this.name+",age="+this.age+",gender="+this.gender+"]"
}

或者直接修改原型中的tostring()方法

Person.prototype.tostring=function(){
 return "Person[name="+this.name+",age="+this.age+",gender="+this.gender+"]"
}

垃圾回收

当一个对象没有任何的变量或者属性对它进行引用,此时我们将永远无法操作该对象,此时这种对象就是一个垃圾,这种对象过多会占用大量空间,使程序运行变慢,所以必须进行清理。
在js中有自动的垃圾处理机制,会自动的将这些垃圾对象从内存中销毁。
我们不需要也不能进行垃圾回收的操作
我们只需要将不再使用的对象设置为null即可

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343