Javascript是面向对象的,但是很多人并不完全理解它。
在Javascript中,对象分为两类,可以称为公共对象的是我们对对象的共同理解:这些数字、
日期、
用户定义(如:{)等。
另一种称为
方法对象的
函数是我们通常定义的函数,您可能会感到奇怪:方法是方法,对象是什么但在Javascript中,该方法实际上被视为对象:
复制代码代码如下所示:
函数func(){ alert(你好!);}
警报(func.tostring());
在这种
情况下,虽然
功能被定义为一种方法,它本身包含了一个toString方法,说明功能被视为一个对象。更准确地说,功能是一个方法对象。下面是例子的延续:
复制代码代码如下所示:
func.name =我功能。;
警报(函数名);
我们可以任意
设置函数的
属性,这就证明了函数是一个对象,那么方法对象和普通对象的
区别在哪里呢当然,第一个方法对象可以
执行,后面有一对圆括号,这是方法对象的执行。
复制代码代码如下所示:
Func();
因此,方法对象具有两重性,一方面它可以被执行,另一方面它可以作为普通对象使用,这
是什么意思这意味着该方法的对象可以完全
独立于其他对象。我们可以比较一下java,java,方法必须在类定义并不能单独存在,有没有需要Javascript。
方法对象与其他方法无关,这意味着它可以任意引用和传递:
复制代码代码如下所示:
函数调用(f){
(f);
}
调用(函数);
一个方法对象,函数,被传递给另一个方法对象,调用,允许后者在适当的时候执行函数,这就是所谓的回调。此外,这个方法对象的特殊性使得这个键不容易掌握。
除了被执行,方法对象还有一个特殊的函数,它可以通过新关键字
创建一个公共对象。
当每个方法对象被创建时,它会自动拥有一个名为原型的属性,这个属性没有什么特别的。它可以访问其他属性,也可以被赋值。但是当我们用新关键字创建一个对象时,原型
工作:它的值(也是一个对象)中包含的所有属性都将被复制到新创建的对象:
复制代码代码如下所示:
函数的原型;
新函数();
警报(f.name);
在执行过程中,两个对话框弹出对话框,后者表明F复制func.prototype.the以前对话框名称属性
显示功能是作为一种方法执行新的对象,你可能会问,你为什么要在这个时间的功能事实上,此时函数的执行是构造函数的函数:
复制代码代码如下所示:
函数(){
这个
名字已经被改变了。
}
函数的原型;
新函数();
警报(f.name);
您将
发现f的name属性不再是函数的原型,这是函数的对象方法所扮演的构造函数的函数。因此,在Javascript中,用新关键字创建对象是以下三个
步骤:
1。创建一个新的公共对象;
2。将方法对象的原型属性的所有属性复制到新的公共对象。
三.使用新的公共对象作为上下文来执行方法对象。
一个语句类似于新函数(),可以描述为从一个词中创建一个新对象。
所以我们可以利用这一点。例如,有两种方法:对象和B.从一个包含所有A.prototype的属性创建新的对象,然后将它分配给B.prototype,这样做产生新对象不具有相同的属性代码是这样的:
复制代码代码如下所示:
a.prototype.hello =函数(){ alert(你好!);}
b.prototype =新一();
新的B();
这就是所谓的Javascript继承,它的本质是一个属性的拷贝,它是用原型实现的,如果不使用原型,那么使用循环,效果是一样的,所谓多重继承,自然是处处复制的。
Javascript中面向对象的原理就是这样,我从一开始到结束都没有提到类的概念,因为Javascript没有这样的东西,难道没有面向对象的类吗当然。第一类,然后是对象,这是不合理的,因为类原来是从对象派生出来的,第一个对象又是类,这是合理的:
复制代码代码如下所示:
我发现了一件事。
o.eat =功能({ return)我吃。} / /我发现它会吃;
o.sleep =功能({ return)zzzzzz…} / /我发现它会睡觉;
o.talk =功能({ return)嗨!我发现它可以说话;
o.think =功能({ return)嗯} / /我发现它会想。
var =新的(函数);我决定给它取人的名字。
human.prototype = O; / /这件事是所有人的概念。
新的(人类);当我发现其他类似的东西时,
警报((h.talk)) / /我知道这是!