javascript 面向对象1
2015-10-24 10:41
344 查看
<span style="font-family: Georgia, serif; letter-spacing: -0.119999997317791px; line-height: 28.7999992370605px; word-spacing: 2.40000009536743px; background-color: rgb(245, 245, 213);">Javascript是一种基于对象(object-based)的语言,对象包含</span><span style="font-family: Georgia, serif; letter-spacing: -0.119999997317791px; line-height: 28.7999992370605px; word-spacing: 2.40000009536743px; background-color: rgb(245, 245, 213);">属性"(property)和"方法"(method)</span>一:声明对象1>原始声明
<span style="color: rgb(17, 17, 17); font-size: 16px; letter-spacing: -0.119999997317791px; line-height: 28.7999992370605px; word-spacing: 2.40000009536743px; font-family: Arial, Helvetica, sans-serif;"><span style="white-space:pre"> </span>var cat1 = {}; // 创建一个空对象</span>
<pre name="code" class="javascript" style="color: rgb(17, 17, 17); font-size: 16px; letter-spacing: -0.119999997317791px; line-height: 28.7999992370605px; word-spacing: 2.40000009536743px;"><span style="white-space:pre"></span><pre name="code" class="javascript">
<span style="white-space:pre"> </span>cat1.name = "大毛"; // 给对象的属性赋值 <span style="white-space:pre"> </span>cat1.color = "黄色";2>函数声明
<span style="color: rgb(17, 17, 17); font-size: 16px; letter-spacing: -0.119999997317791px; line-height: 28.7999992370605px; word-spacing: 2.40000009536743px; font-family: Arial, Helvetica, sans-serif;"><span> </span></span><span style="color: rgb(17, 17, 17); font-family: Arial, Helvetica, sans-serif; font-size: 16px; letter-spacing: -0.119999997317791px; line-height: 28.7999992370605px; word-spacing: 2.40000009536743px;">function Cat(name,color){</span><span style="color: rgb(17, 17, 17); font-size: 16px; letter-spacing: -0.119999997317791px; line-height: 28.7999992370605px; word-spacing: 2.40000009536743px; font-family: Arial, Helvetica, sans-serif;"><span></span></span><pre name="code" class="javascript"> return { name:name, color:color } }
<span style="color: rgb(17, 17, 17); font-family: Consolas, Monaco, 'Andale Mono', monospace; font-size: 16px; letter-spacing: -0.119999997317791px; line-height: 28.7999992370605px; word-spacing: 2.40000009536743px; background-color: rgb(245, 242, 240);">var cat1 = Cat("大毛","黄色");//实例化一个对象</span>
</pre><pre name="code" class="javascript" style="color: rgb(17, 17, 17); font-size: 16px; letter-spacing: -0.119999997317791px; line-height: 28.7999992370605px; word-spacing: 2.40000009536743px;"><span style="letter-spacing: -0.119999997317791px; line-height: 28.7999992370605px; word-spacing: 2.40000009536743px; font-family: Georgia, serif; background-color: rgb(245, 245, 213);">3>构造函数</span>
<span style="letter-spacing: -0.119999997317791px; line-height: 28.7999992370605px; word-spacing: 2.40000009536743px; font-size: 16px; font-family: Arial, Helvetica, sans-serif;"> </span><span style="letter-spacing: -0.119999997317791px; line-height: 28.7999992370605px; word-spacing: 2.40000009536743px; font-family: Arial, Helvetica, sans-serif; font-size: 16px;">function Cat(name,color){</span>
<pre name="code" class="javascript"> this.name=name; <pre name="code" class="javascript" style="color: rgb(17, 17, 17); font-size: 19.2000007629395px; letter-spacing: -0.119999997317791px; line-height: 28.7999992370605px; word-spacing: 2.40000009536743px;"><span style="white-space:pre"> </span>this.color=color;}
<span style="font-family: Consolas, Monaco, 'Andale Mono', monospace; letter-spacing: -0.119999997317791px; line-height: 28.7999992370605px; word-spacing: 2.40000009536743px; background-color: rgb(245, 242, 240);"><span style="color: rgb(17, 17, 17); font-family: Consolas, Monaco, 'Andale Mono', monospace; font-size: 16px; letter-spacing: -0.119999997317791px; line-height: 28.7999992370605px; word-spacing: 2.40000009536743px; background-color: rgb(245, 242, 240);">var cat1 = new Cat("大毛","黄色");</span>;//实例化一个对象</span>实例自动含有一个constructor属性,指向它们的构造函数。alert(cat1.constructor== Cat); //truealert(cat1 instanceof Cat); //true 验证对象类型4〉Prototype模式Javascript规定,每一个构造函数都有一个prototype属性,指向另一个对象。这个对象的所有属性和方法,都会被构造函数的实例继承。这意味着,我们可以把那些不变的属性和方法,直接定义在prototype对象上。 function Cat(name,color){ this.name = name; this.color = color; } Cat.prototype.type = "猫科动物"; Cat.prototype.eat = function(){alert("吃老鼠")};然后,生成实例。 var cat1 = new Cat("大毛","黄色"); var cat2 = new Cat("二毛","黑色"); alert(cat1.type); // 猫科动物 cat1.eat(); // 吃老鼠这时所有实例的type属性和eat()方法,其实都是同一个内存地址,指向prototype对象,因此就提高了运行效率。 alert(cat1.eat == cat2.eat); //true六、 Prototype模式的验证方法为了配合prototype属性,Javascript定义了一些辅助方法,帮助我们使用它。,6.1 isPrototypeOf()这个方法用来判断,某个proptotype对象和某个实例之间的关系。 alert(Cat.prototype.isPrototypeOf(cat1)); //true alert(Cat.prototype.isPrototypeOf(cat2)); //true6.2 hasOwnProperty()每个实例对象都有一个hasOwnProperty()方法,用来判断某一个属性到底是本地属性,还是继承自prototype对象的属性。 alert(cat1.hasOwnProperty("name")); // true alert(cat1.hasOwnProperty("type")); // false6.3 in运算符in运算符可以用来判断,某个实例是否含有某个属性,不管是不是本地属性。 alert("name" in cat1); // true alert("type" in cat1); // truein运算符还可以用来遍历某个对象的所有属性。 for(var prop in cat1) { alert("cat1["+prop+"]="+cat1[prop]); }