首页 > 代码库 > javascript面向对象

javascript面向对象

对象有三种:内置对象,DOM对象,自定义对象

那函数是什么类型,先看这样一段代码

function fn(){
    alert(‘hello world‘);
}

fn();

先声明,在调用,成功运行

var fn = function(){
    alert(‘hello world‘);
};
fn();

先声明,在调用,成功运行

fn();
function fn(){
    alert(‘hello world‘);
}

再看这段代码,按照js是从上向下执行的规则,函数先调用再声明是不行的,但这段代码运行后也成功弹出了hello world.

fn();
var fn = function(){
    alert(‘hello world‘);
};

报错,提示fn is not a function

原因是

function fn(){}叫函数的声明,var fn = function(){}叫做函数的表达式.函数的表达式必须先声明再调用,但函数的声明特殊在可以先调用再声明,js引擎在解析js代码时会先检测有多少这样的函数,然后把它提前声明

函数是不是对象?我们typeof一下发现是function,function不是一个对象么?关于函数其实有标准的写法:

var fn = function(){

alert(hello world);

}

写成var fn = new Function(“alert(hello world);”)

这时的typeof虽然是function 但在js中凡是new出来的都可以算作对象.此时,函数便可以算作一个对象了

对象直接量:

js,我们可以写出如下代码

var o = new Object();

o.name = ‘lisi‘;

o.sayhello = function(){

    alert(hello);

}

其实还有一种更为直观的写法,被称作对象直接量

var o = {

    name:‘lisi‘,

    sayhello:function(){}

}

o.sayhello();

这种方式更为简单和直观,相当于把一些属性方法都封装到一个对象里,在接下来的编程我将只关心这个对象即可

:具有相同方法和属性的对象的集合

:function Cat(name,age){

this.name = name,

this.age = age

}

Cat.prototype.eat = function(){

console(aaa);

}

var cat1 = New Cat(‘mimi’,3);

cat1.eat();

将属性封装到类里,将方法封装到原型prototype

es6中可以直接用class关键字

javascript面向对象