有没有一种方法Javascript可以模仿面向对象的语言?

时间:2011-05-11 20:23:44

标签: javascript oop

我想知道Javascript是否可以模仿面向对象语言。即你能模仿用属性定义自定义类/对象的能力吗?由于JSON基本上是javascript传递对象的一种方式,我认为必须有一些方法在客户端创建/存储对象,然后重用它们?如果有人能给我指出一个很好的教程(如果可以做到这一点),那将非常感激。

即使是一些示例代码,您可以动态创建一个对象,然后使用jquery使用它。

8 个答案:

答案 0 :(得分:5)

Javascript是一种面向对象的语言,它不是基于类的对象系统,而是基于原型的对象系统。请参阅此文章:http://en.wikipedia.org/wiki/Prototype-based_programming

答案 1 :(得分:4)

我发现这是一个很棒的教程:https://developer.mozilla.org/en/Introduction_to_Object-Oriented_JavaScript

必须说Javascript是面向对象的,但它是基于原型的,而不是基于类的。

答案 2 :(得分:2)

Douglas Crockford是JavaScript社区中公认的人,

他关于JS的谈话非常好。在本系列中,他讨论了包括面向对象javascript的高级js。

http://video.yahoo.com/video/play?vid=111585 http://video.yahoo.com/video/play?vid=111586 http://video.yahoo.com/video/play?vid=111587

答案 3 :(得分:1)

简短的回答是“是”。 developer.mozilla.org上有几篇优秀的文章:

答案 4 :(得分:1)

答案 5 :(得分:1)

JavaScript 面向对象。只是它是prototype-based而不是基于类。

尽管如此,JSON并不适合序列化具有继承属性的对象。

答案 6 :(得分:0)

如果您更喜欢实际的书,这对我来说非常有用: Pro Javascript Design Patterns

答案 7 :(得分:0)

虽然Javascript没有内置类系统(虽然Javascript的下一个版本可能包含此内容),但是有许多不同的Javascript OO设计模式可以模仿类的行为。 Module模式通过允许Javascript对象同时拥有私有和公共成员来模仿类。这是这样实现的:

var Person = function() {
    var firstName = "Greg";
    var lastName = "Franko";
    return {
        getFirstName: function() {
            return firstName;
        },
        getLastName: function() {
            return lastName;
        }
    }        
}

//Instantiate a new Person object
var greg = new Person();

//This will not work because the firstName property is private
console.log(greg.firstName);

//This will work because the getFirstName method is public
console.log(greg.getFirstName());