js13--对象、原型

简介:
复制代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Untitled Document</title>
        <script type=text/javascript charset=utf-8>
        var obj = new Object(); // 一样的var obj = {};     var a = new F();
        obj.name = 'z3';
        obj.sex  = '';
        obj.sayName = function(){alert('我是张三!')};
        // 类的概念
        
        // 第一种形式 工厂模型 
        function createPerson(name , sex , age){
            var obj = new Object();
            obj.name = name ; 
            obj.sex = sex ;
            obj.age = age ;
            obj.sayName = function(){
                alert(this.name);
            }
            return obj;
        }
        var p1 = createPerson('z3' , '' , 20);
        var p2 = createPerson('z4' , '' , 25);
        alert(p1.sex);
        p1.sayName();
        
        // 第二中形式 构造函数式  new Array new Date
        // 函数的第一个字母大写 (类的模版)
        function Person(name , age , sex){
            this.name = name ;
            this.age  = age ; 
            this.sex  = sex ;
            this.sayName = function(){
                alert(this.name);
            }
        }
        
        //构造一个对象 new关键字 传递参数 执行模版代码 返回对象
        
        var p1 = new Person('小1' , 20 , '');
        var p2 = new Person('小2' , 21 , '');
        alert(p1.name);
        p1.sayName();
        alert(p1 == p2); //false, 
        
        alert(p1.constructor == Person);
        alert(p2.constructor == Person);
    
        alert(p1 instanceof Person);    //true
        alert(p1 instanceof Object);    //true
        
        //创建对象的方式:
        // 1当作构造函数去使用 :
        var p1 = new Person('小1' , 20 , '');
        // 2作为普通的函数去调用
        Person('小2' , 25 , '');//在全局环境里定义属性并复制 直接定义在window上,this是window,
        alert(name);
        // 3在另一个对象的作用域中调用
        var o = new Object();  
        // call  applly
        Person.call(o,'小4' , 12 , '');  //o动态加一个方法,一次性的,复制方法的属性
        alert(o.name);
        </script>
    </head>
    <body>
    </body>
</html>
复制代码
复制代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Untitled Document</title>
        <script type=text/javascript charset=utf-8>
        //同级函数可以互相访问
        function Person(name , age){
            this.name = 1 ; 
            sayName() ; //同级函数可以互相访问
            alert(333);
        }

        function sayName(){
            alert(222);
            Person();//同级函数可以互相访问
        }
        
        // 原型 prototype
        function Person(name , age){
            this.name = name ; 
            this.age  = age ; 
            this.sayName = function(){alert('我是姓名!')};//后面的函数看成匿名对象,每次不一样。函数可以公用,放在原型里面。
            this.sayName = sayName1 ; //右边的函数是外部的函数
        }
        // 定义了一次函数
        function sayName1(){
            alert(this.name);
        }
        var p1 = new Person('z3',20);
        var p2 = new Person('z4',21);
        p1.sayName();
        p2.sayName();
        alert(p1.sayName == p2.sayName);     // false 
        alert(p1.name == p2.name);         // false 
        
        
        // prototype 创建每一个函数都有一个prototype属性,这个属性其实是一个指针,而这个指针总指向一个对象
        // 这个对象的用途就是将特定的属性和方法包含在内,起到一个所有实例所共享的作用
        //闭包实现了函数层面多个子函数共享父类函数的属性、方法。类层面上原型实现了多个子类对象共享父类对象的属性、方法。
        function Person(){}
        var obj = Person.prototype;//原型的构造器是函数本身
        alert(typeof obj);//object
        obj.name = 'z3';
        obj.age  = 20 ; 
        obj.sayName = function(){alert(this.name);};//原型对象里面的this是对象自己
        var p1 = new Person();
        var p2 = new Person();
        alert(p1.age);
        alert(p2.age);
        p1.sayName();
        p2.sayName();
        alert(p1.sayName == p2.sayName)//true,同一个地址
        
        //函数.prototype =  原型对象,原型对象.constructor = 函数
        alert(obj.constructor);//Person
        //实例对象.prototype = 原型对象
        alert(p1.prototype);
        alert(obj.isPrototypeOf(p1));//是不是这个对象的原型
        //Object.getPrototypeOf():根据实例对象获得原型对象
        //object.hasOwnProperty(attribute) 判断属性是否属于对象本身
//in 操作符 判断对象中是否存在该属性(无论是实例对象还是原型对象)
//Object.keys();拿到当前对象里的所有keys 返回一个数组
//getOwnPropertyNames 枚举对象所有的属性 :不管该内部属性能否被枚举

        </script>
    </head>
    <body>
    </body>
</html>
复制代码

 


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/6865695.html,如需转载请自行联系原作者

相关文章
|
2月前
|
JavaScript 前端开发
JavaScript遍历数组和对象常用方法总结
以上代码展示了数组和对象的多种遍历方法。对于数组,使用了传统的 `for` 循环、`for...in` 和 ES6 的 `for...of` 进行遍历;对于对象,则通过 `for...in`、`Object.keys()`、`Object.values()` 和 `Object.entries()` 来获取键值对。`for...of` 循环适用于遍历具有迭代协议的数据结构,如数组、字符串等,而对象遍历则更多地依赖于 `Object` 方法来获取其属性集合。
JavaScript遍历数组和对象常用方法总结
|
2月前
|
JavaScript 前端开发 索引
JS遍历数组里数组下的对象,根据数组中对象的某些值,组合成新的数组对象
这篇文章介绍了如何在JavaScript中遍历数组里数组下的对象,并根据对象的某些属性值组合成一个新的数组对象。主要内容包括使用ES6的`for...of`循环来遍历数组对象,然后根据需要提取对象中的属性值,并将它们放入新的对象中,最终形成一个新的对象数组以供使用。
|
2月前
|
JSON JavaScript 前端开发
JavaScript实现字符串转json对象的方法
JavaScript实现字符串转json对象的方法
|
1天前
|
JSON JavaScript 前端开发
js如何格式化一个JSON对象?
js如何格式化一个JSON对象?
9 3
|
8天前
|
JavaScript 前端开发
js之浏览器对象|28
js之浏览器对象|28
|
8天前
|
JSON JavaScript 前端开发
js原型继承|26
js原型继承|26
|
1月前
|
JavaScript 前端开发
JavaScript基础知识-枚举对象中的属性
关于JavaScript基础知识中如何枚举对象属性的介绍。
27 1
JavaScript基础知识-枚举对象中的属性
|
22天前
|
JavaScript 前端开发
JavaScript Boolean(布尔) 对象
Boolean(布尔)对象用于将非布尔值转换为布尔值(true 或者 false)。
29 8
|
4天前
|
存储 JavaScript 前端开发
JavaScript Number 对象
JavaScript Number 对象
8 0
|
4天前
|
JavaScript 前端开发
JavaScript prototype(原型对象)
JavaScript prototype(原型对象)
10 0