javascript的简单类型包括数字、字符、布尔值、null值和undefined值。

                  其他的类型都是对象。

对象是可变的键控集合。在javascript中,数组是对象,函数是对象,正则表达式是对象,对象自然也是对象。

对象是属性的容器,其中每个属性都拥有名字和值。

属性的名字可以是包括空字符串的任何字符串。属性的值可以是除了undefined之外的任意值

javascript的对象是无类别。它对新属性的名字和值没有约束。对象适合用于收集和管理数据。对象可以包含其他对象,

所以它们可以容易地表示成树形或者图形结构

javascript包括一个原型链特性,允许对象继承另一对象的属性。

 

对象字面量

对象字面量提供了一种非常方便地创建新对象值的表示法。

var empty_object={};

原型

      每个对象都连接到一个原型对象,并且它可以从中继承属性。

      所有通过对象字面量创建的对象都连接到Object.prototype这个javascript种标准的对象。

枚举

       for in 语句可用来遍历一个对象中的所有属性名。该枚举过程会列出所有的属性(包括原型中的属性)

       一般使用hasOwnProperty方法和typeof来过滤

 

函数对象

在javascript中函数就是对象。对象是“名/值”对的集合并拥有一个连到原型对象的隐藏链接.

对象字面量产生的对象链接到 Object.prototype。 函数对象连接到 Function.prototype(该

原型对象本身连接到 Object.prototype). 

每个函数在创建时有两个附加的隐藏属性: 函数的上下文和实现函数行为的代码.

每个函数对象在创建时也随带一个prototype属性。

它的值(函数对象的实例)是一个拥有constructor属性并且值即为该函数的对象。

调用

调用一个函数将暂停执行当前的函数。每个函数接收两个附加的参数:this和arguments。

this在面向对象编程中非常重要, 它的值取决于调用的模式(方法调用模式、函数调用模式、构造器调用模式、

apply调用模式)

方法调用模式 : 当一个函数保存为对象的一个属性时。我们称它为一个方法this对象即为该对象

函数调用模式 : 当一个函数并非一个对象的属性时,那么它被当做一个函数来调用

构造器调用模式:如果在一个函数前面带上new来调用,那么将创建一个隐藏链接到该函数的 prototype 成员的新对象

                          ,同时 this 将被绑定到那个新对象上

Apply调用模式

返回

一个函数总是会返回一个值。如果没有使用return指定返回,则返回undefined。

使用return语句,则return语句之后的代码不执行。

 

 

深入了解原型链、类型等

源码:

>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title></title>
    <script type="text/javascript">
        window.onload = function() {
            var div_show = document.getElementById("div_show");
 
            Object.prototype.objprototype = function() { }
            Function.prototype.fnprototype = function() { }
            Function.fnStaticfunction = function() { }
 
 
            function people() {
                this.sex = 0;
                this.age = 1;
                this.getName = function() { }
            }
            people.eat = function() { };
            var p = new people();
            for (var i in people.prototype) {
                div_show.innerHTML += "peopleprototype:  " + i + "<br>";
            }
            div_show.innerHTML += "<br>";
            for (var i in p) {
                div_show.innerHTML += "peopleinstance:  " + i + "<br>";
            }
            div_show.innerHTML += "<br>";
            for (var i in people) {
                div_show.innerHTML += "people:  " + i + "<br>";
            }
            div_show.innerHTML += "<br>";
            
 
            function asia() { }
            asia.StaticeatEastFood = function() { }
            asia.prototype = new people();
            asia.prototype.eatEastFoodPrototype = function() { }
 
            var asian = new asia();
 
            for (var i in asian) {
                div_show.innerHTML += "asian:  " + i + "<br>";
            }
            div_show.innerHTML += "<br>";
            for (var i in asia) {
                div_show.innerHTML += "asia:  " + i + "<br>";
            }
            div_show.innerHTML += "<br>";
            for (var i in asia.prototype) {
                div_show.innerHTML += "asia:  " + i + "<br>";
            }
 
            var stooge = {
                "first-name": "J",
                "last-name": "H",
                getName: function() { }
            }
            div_show.innerHTML += "<br>";
            for (var i in stooge) {
                div_show.innerHTML += "stooge:  " + i + "<br>";
            }
 
            Function.prototype.method = function(name, value) {
                this.prototype[name] = value;
            }
            Number.method("getss", function() { });
        }
    </script>
</head>
<body>
<div id="div_show"></div>
</body>
</html>

相关文章: