js面向对象 函数就是对象

  • A+
所属分类:JavaScript
var person = new Object();
person.name = "bob";
person.age = 34;
person.job = "Software";

person.sayName = function() {
    alert(this.name);
}

// 对象字面量写法
var person = {
    name: "zhs",
    age: 32,
    job: "Software",
    sayName: function() {
        alert(this.name);
    }
}

// 工厂模式
function creatPerson(name, age, job) {
    var o = new Object();
    o.name = name;
    o.age = age;
    o.sayName = function() {
        return this.name
    }
    return o;
}
var p1 = new creatPerson("bob", "220", "清洁工");
console.log(p1);

// 构造函数模式 (有点 可以判断对象类型)
function Person(name, age, obj) {
    this.name = name;
    this.age = age;
    this.obj = obj;
    this.sayName = function() {
        // alert(this.name);
    }
}
var pa1 = new Person("sos", 44, "软件工程师");
var pa2 = new Person("ccc", 22, "软件工程师");
console.log(pa2.constructor == Person); // true 检测对象类型
console.log(pa2 instanceof Person) // true
var o = new Object();
o = pa1;
Person.call(o, "aaa", 55, "sss");
console.log(o.sayName());

// 原型模式
function Ps() {}
Ps.prototype.name = "asd";
Ps.prototype.age = 34;
var ps1 = new Ps();
console.log(ps1.age); //34

// hasOwnPrototype() 原型属性返回 false,实例属性返回 true
// in 包含原型属性返回 true
var ps2 = new Ps();
ps2.name = "cacaca";
console.log(ps2.name);
console.log(ps2.hasOwnProperty("name")); // true
console.log("age" in ps2); // true


// 判断原型属性 函数
function hasPrototyperty(object, name) {
    return !object.hasOwnProperty(name) && (name in object);
}

var ps3 = new Ps();
ps3.name = "aaac"; // 实例属性
console.log(hasPrototyperty(ps3, "name")); // false

 

weinxin
我的微信公众号
我的微信公众号扫一扫

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: